Анимация
JavaScript
|
Главная Библионтека chomp(5name = <STDIN>); unlink ($name); Функция unlink может принимать также список имен, подлежащих удалению: unlink ("cowbird","starling"); # убьем двух зайцев unlink <*.о>; # как "rm *.о" в shell Операция <* .о> выполняется в списочном контексте и создает список имен файлов, которые совпадают с образцом. Это именно то, что нужно передать в unlmk. Функция unlmk возвращает количество успешно удаленных файлов. Если указан только один аргумент и соответствующий ему файл удаляется, то возвращается единица; в противном случае возвращается нуль. Если заданы имена трех файлов, но удалить можно только два, то возвращается два. Установить, какие именно файлы были удалены, на основании возвращенного значения невозможно, поэтому если вам нужно определить, какой файл не удален, удаляйте их по одному. Вот как производится удаление всех объектных файлов (имена которых заканчиваются на . о) с выдачей сообщения об ошибке для каждого файла, который удалить нельзя: foreach $file (<*.о>) ( # пройти по списку .о-файлов unlmk($flie) I I warn "having trouble deleting $file: $"; Если unlink возвращает l (это означает, что единственный указанный файл был удален), то функция warn пропускается. Если имя файла не может быть удалено, результат "О" означает "ложь", поэтому warn выполняется. Абстрактно это можно прочитать так: "удали этот файл или сообщи мне о нем". Если функция unlmk дается без аргументов, то по умолчанию вновь используется переменная $ . Так, приведенный выше цикл можно записать следующим образом: foreach (<*.о>) { # пройти по списку .о-файлов unlmk I I warn "having trouble deleting $ : $"; Переименование файла в shell UNIX имя файла изменяется с помощью команды inv. В Perl эта операция обозначается как rename {$старое, $новое). Вот как следует переименовать файл fred в barney: rename("fred","barney") die "Cant rename fred to barney: $i"; Как и большинство других функций, при успешном выполнении rename возвращает значение "истина", поэтому, чтобы узнать, сработала ли функция rename, нужно проверить этот результат. 174 Ияучпе.и PERL Когда пользователь вводит mv файл какой-то каталог, команда mv делает пару закулисных фокусов и создает полное пугевое имя (или, другими словами, полное описание пути к месту размещения файла). Функция rename ЭТОГО делать не умеет. В Perl эквивалентная операция выглядит так: rename{"файл","какой-то каталог/файл") ; Обратите внимание: в Perl нужно указать имя файла в новом каталоге явно. Кроме того, команда mv копирует файл, когда он переименовывается, с одного смонтированного устройства на другое (если вы используете одну из достаточно соверщенных операционных систем). Функция rename не настолько умна, поэтому вы получите сообщение об ошибке, означающее, что эту проблему нужно решать каким-то иным способом (возможно, посредством вызова команды mv с теми же именами). Модуль File::Find поддерживает функцию move. Создание для файла альтернативных имен: связывание ссылками Иногда пользователю нужно, чтобы у файла было два, три, а то и дюжина имен (как будто одного имени файлу не хватает!). Операция присвоения файлу альтернативных имен называется создание ссылок. Две основных формы создания ссылок - это создание жестких ссылок и создание симво-лгргеских (или мягких) ссылок. Не все виды файловых систем поддерживают оба типа ссылок или хотя бы один из них. В этом разделе описаны файловые системы, соответствующие стандарту POSIX. Жесткие и силшоличсские ссылки Жесткая ссылка на файл неотличима от его исходного имени; ни одна из жестких ссылок не является более "реальным именем" для файла, чем любая другая. Операционная система следит за тем, сколько жестких ссылок обозначают файл в каждый данный момент времени. Когда файл впервые создается, у него имеется одна ссылка. Каждая новая жесткая ссылка увеличивает это число, а каждая удаленная - уменьшает. Когда исчезает последняя ссылка на файл и файл закрывается, он прекращает свое существование. Каждая жесткая ссылка на файл должна располагаться в той же файловой системе (обычно это диск или часть диска). По этой причине нельзя создать новую жесткую ссылку на файл, находящийся в другой файловой системе. В большинстве систем применение жестких ссылок для каталогов ограничено. Чтобы структура каталогов имела вид дерева, а не произвольную форму, для каталога допускается наличие только одного имени от корня, ссылки из "точечного" файла на данный каталог, и семейства жестких ссылок "точка-точка" из каждого из его подкаталогов. Если вы попытаетесь создать еше одну жесткую ссылку на каталог, то получите сообщение об ошибке (если только вы не привилегированный пользователь - тогда вам придется провести всю ночь за восстановлением своей поврежденной файловой системы). Символическая ссылка - это файл особого вида, который содержит в качестве данных путевое имя. Когда этот файл открывается, операционная система рассматривает его содержимое как заменяющие символы для данного путевого имени и заставляет ядро еще немного порыскать по дереву каталогов, используя новое имя. Например, если символическая ссылка fred содержит имя barney, то указание открыть файл fred - это, на самом деле, указание открыть файл barney. Если barney - каталог, то fred/wilma обозначает barney/wilma. Содержимое символической ссылки (т.е. имя, на которое указывает символическая ссылка) не обязательно должно обозначать существующий файл или каталог. В момент, когда создается fred, существование barney вовсе не обязательно. Более того, barney может никогда и не появиться! Содержимое символической ссылки может указывать на путь, который ведет за пределы текущей файловой системы, поэтому можно создавать символическую ссылку на файл, находящийся в другой смонтированной файловой системе. Отслеживая новое имя, ядро может натолкнуться на другую символическую ссылку. Эта новая ссылка содержит новые элементы отслеживаемого пути. Одни символические ссылки могут указывать на другие символические ссылки. Как правило, допускается до восьми уровней символических ссылок, но на праетике такое встречается редко. Жесткая ссылка защищает содержимое файла от уничтожения (потому что она считается одним из имен файла). Символическая же ссылка не может уберечь содержимое файла от исчезновения. Символическая ссылка может указывать на другие смонтированные файловые системы, а жесткая - не может. Для каталога может быть создана только символическая ссылка. Создание жестких и символических ссылок в Perl в ОС UNIX жесткие ссылки создают с помощью команды In. Например, команда In fred bigdumbguy позволяет создать жесткую ссылку из файла fred (который должен существовать) на bigdumbguy. В Perl это выражается так: link("fred","bigdumbguy") die "cannot link fred to bigdumbguy"; Функция link принимает два параметра - старое имя файла и новый псевдоним для этого файла. Если ссылка создана успешно, link возвращает значение "истина". Как и команда mv, UNIX-команда In позволяет указывать в качестве псевдонима только каталог (без имени файла). Функция link 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 [ 55 ] 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |