Идёт загрузка страницы...

htp://aptem.net.ru





Функции для работы с файлами и каталогами

-X
В Perl предусмотрен набор унарных операций, возвращающих значение только одного поля структуры индексного дескриптора. Эти операции в документации называются "операциями -X", так как их названия состоят из дефиса с последующим единственным символом. Все они являются унарными именованными операциями и имеют свой приоритет в сложных выражениях.

Полный перечень унарных операций проверки файлов
-rФайл может читаться эффективным uid/gid
-wЗаписывать в файл может эффективный uid/gid
-xФайл может выполняться эффективным uid/gid
-oВладельцем файла является эффективный uid/gid
-RФайл может читаться действительным uid/gid
-WЗаписывать в файл может действительный uid/gid
-XФайл может выполняться действительным uid/gid
-OВладельцем файла является действительный uid/gid
-eФайл существует
-zРазмер файла равен нулю
-sРазмер файла отличен от нуля (возвращает размер)
-fФайл является обычным (plain) файлом
-dФайл является каталогом
-lФайл является символической ссылкой
-pФайл является именованным програмным каналом (FIFO) или проверяемый дескриптор связан с програмным каналом
-SФайл является сокетом
-bФайл является специальным блочным файлом
-cФайл является специальным символьным файлом
-tДескриптор файла связан с терминалом
-uУ файла установлен бит setuid
-gУ файла установлен бит setgid
-kУ файла установлен бит запрета (sticky bit)
-TФайл является текстовым файлом
-BФайл является двоичным (противоположным текстовому)
-MВозраст файла в днях на момент выполнения программы
-AТо же для врмени последнего обращения к файлу
-CТо же для время последней модификации индексного дескриптора файла


Унарные операции применяются к строке, содержащей имя файла, к выражению, вычисляемым значением которого является имя файла, или к файловому дескриптору Perl. Если параметр операции не задан, то она тестирует файл, чье имя содержится в специальной переменной $_. Каждая операция проверки атрибута файла возвращает 1, если файл обладает соответствующим атрибутом, пустую строку "" в противном случае и неопределенное значение undef, если указанный в параметре файл не существует.

Несколько слов об алгоритме определения текстовых и двоичных файлов (операции -T и -B). Эти операции анализируют содержимое первого блока файла на наличие "странных" символов - необычных управляющих последовательностей или байтов с установленными старшими битами. Если обнаружено достаточно большое количество подобных символов (больше 30%), то файл считается двоичным, иначе текстовым. Любой файл с пустым первым блоком рассматривается как двоичный.

Если эти операции применяются к файловым дескрипторам Perl, то проверяется содержимое буфера ввода/вывода, а не первого блока файла. Обе эти операции, примененные к файловым дескрипторам, возвращают булево значение Истина, если связанный с дескриптором файл пуст или установлен на конец файла.

При выполнении унарных именованных операций проверки файла на самом деле неявно вызывается функция stat(), причем результаты ее вычисления кэшируются, что позволяет использовать специальный файловый дескриптор _ для ускорения множественных проверок файла:
if( -s("filename") && -T _) {
# Что-то делаем для текстовых файлов не нулевого размера
. . . . . . . . . . . . . .
}

chdir

Изменение текущего рабочего каталога на каталог, определяемый значением параметра ВЫРАЖЕНИЕ. Если параметр опущен, домашний каталог становится текущим. Возвращает бклево значение Истина в случае успешного выполнения операции замены текущего каталога и Ложь в противном случае.
chdir [ВЫРАЖЕНИЕ]

chmod
Синтаксис :
chmod СПИСОК

Функция chmod() изменяет права доступа для файлов, представленных в списке, переданном ей в качестве параметра. Первым элементом этого списка должно быть трехзначное восьмеричное число, задающее права доступа для владельца, пользователей из группы, в которую входит владелец, и прочих пользователей. Каждая восьмеричная цифра определяет право на чтение файла, запись в файл и его выполнение (в случае если файл представляет выполняемую программу) для указанных выше групп пользователей. Установленные биты ее двоичного представления отражают соответствующие права доступа к файлу. Например, если установлены все три бита (восьмеричное число 7), то соответствующая группа пользователей обладает всеми перечисленными правами: может читать из файла, записывать в файл и выполнять его. Значение равное 6 определяет право на чтение и запись, 5 позволяет читать из файла, выполнять его, но не позволяет записывать в этот файл и т.д. Обычно не выполняемый файл создается с режимом доступа 0666 - все пользователи могут читать и записывать информацию в файл, выполняемый файл - с режимом 0777. Если владелец файла желает ограничить запись в файл пользователей не его группы, то следует выполнить следующий оператор:

chmod 0664, "file.dat";

Возвращаемым значением функции chmod(), как и функции chown(), является количество файлов из списка, для которых операция изменения прав доступа завершилась успешно.

В операционных системах DOS и Windows имеет значение только установка режимов доступа владельца.

chown
Синтаксис :
chown СПИСОК

Любой пользователь, создавший собственный файл, считается его владельцем. Изменить владельца файла из сценария Perl можно функцией chown(). Параметром этой функции является список, первые два элемента которого должны представлять числовые идентификаторы uid и gid. Остальные элементы списка являются именами файлов, для которых изменяется владелец. Эта функция возвращает количество файлов, для которых операция изменения владельца и группы прошла успешно.

Пример :
@list = (234, 3, "file1.dat", "file2.dat");
$number = chown(@list);
warn "Изменился владелец не у всех файлов!" if $number != @list-2;

Изменить владельца файла может только сам владелец или суперпользователь (обычно системный администратор) системы UNIX. В операционных системах с файловой системой отличной от UNIX (DOS, Windows) эта функция отрабатывает, но ее установки не влияют на доступ к файлу.

chroot

Определяет новый корневой каталог для всех относительных (начинающихся с косой черты "/") имен файлов процесса пользователя и порожденных им процессов. Не меняет текущий рабочий каталог. В отсутствии параметра используется значение специальной переменной $_. Может вызываться только суперпользователем.
chroot ИМЯ_КАТАЛОГА

close
Синтаксис :
close ДЕСКРИПТОР

По завершению работы с файлом он закрывается функцией close(). Единственным необязательным параметром этой функции является дескриптор, ассоциированный с файлом.

Эта функция возвращает значение Истина, если успешно очищен буфер ввода/вывода и закрыт системный дескриптор файла.
Вызванная без параметра, функция close закрывает файл, связанный с текущим дескриптором, установленным функцией select().

При возникновении ошибок закрытия файла их можно обнаружить применяя специальную переменную $!:
close ( FILE ) or die "Ошибка закрытия файла: $!";

closedir

Закрывает каталог, ассоциированный с дескриптором каталога, заданным параметром ДЕСКРИПТОР. Возвращает булево значение Истина, если каталог успешно закрыт.
closedir ДЕСКРИПТОР

fcntl

Реализует системную команду Unix fcntl(2). Перед использованием следует получить доступ к определениям системных констант оператором use Fcntl.
Возвращаемое значение: если системная функция возвращает -1, то функция Perl - неопределенное значение; если системная функция возвращает 0, то функция Perl строку "0 but true"; если системная функция возвращает какое-либо другое значение, функция Perl возвращает это же значение.
fcntl ДЕСКРИПТОР, ФУНКЦИЯ, СКАЛЯР

glob

Возвращает найденные в текущем каталоге файлы, имена которых удовлетворяют заданному шаблону (с использованием метасимволов Unix "*","?"). Значением выражения должна быть строка, содержащая шаблон имен файлов.
glob ВЫРАЖЕНИЕ

ioctl

Реализует системную команду Unix ioctl(2). Перед использованием следует получить доступ к определениям системных констант оператором require "ioctl.ph";
Возвращаемое значение:
если системная функция возвращает -1, то функция Perl - неопределенное значение;
если системная функция возвращает 0, то функция Perl строку "0 but true";
если системная функция возвращает какое-либо другое значение, функция Perl возвращает это же значение.
fcntl ДЕСКРИПТОР, ФУНКЦИЯ, СКАЛЯР

link

Создает новую "жесткую" ссылку на файл, заданный параметром СТАРЫЙ. Возвращает булево значение Истина в случае успешного создания ссылки и Ложь в противном случае.
link СТАРЫЙ, НОВЫЙ

lstat

Возвращает список значений полей структуры индекснего дескриптора символической ссылки на файл. Если параметр опущен, то используется значение специальной переменной $_.
lstat [ДЕСКРИПТОР]
lstat [ВЫРАЖЕНИЕ]
Используется для получения информации о символических ссылках. Возвращает список значений полей структуры индексного дескриптора самой ссылки, а не файла, на который она ссылается. Эта функция работает аналогично функции stat().
mkdir

Создание нового каталога с именем, заданным в параметре КАТАЛОГ, и режимом доступа, определяемым параметром РЕЖИМ. При успешном создании каталога возвращает булево значение Истина, в противном случае Ложь и в переменную $! заносится сообщение об ошибке.
mkdir КАТАЛОГ, РЕЖИМ

open
Синтаксис :
open ДЕСКРИПТОР, ИМЯ_ФАЙЛА;
open ДЕСКРИПТОР;

Для доступа к файлу из программы Perl необходим дескриптор. Для создания дескриптора используется функция open(). При выполнении операции open с заданым в параметрах именем файла открывается соответствующий файл и создается дескриптор этого файла. В качестве дескриптора файла можно использовать выражение - его значение и будет именем дескриптора. Имя файла задается непосредственно в виде строкового литерала или выражения, значением которого является строка. Операция open без имени файла открывает файл, имя которого содержится в скалярной переменной $ДЕСКРИПТОР, которая не может быть лексической переменной, определенной функцией my().
Пример :
#! perl -w
$var = "out.dat";
$FILE4 = "file4.dat";
open FILE1, "in.dat";                # Имя файла задано строкой
open FILE2, $var;                    # Имя файла задано
                                       переменной
open FILE3, "/perlourbook/01/".$var; # Имя файла вычисляется 
                                       в выражении
open FILE4;                          # Имя файла в 
                                       переменной $FILE4
Если задано не полное имя файла, то открывается файл с указанным именем и расположенный в том же каталоге, что и программа Perl. Можно задавать полное имя файла, однако следует иметь в виду, что оно зависит от используемой операйионной системы. Например, в Windows следует обязательно задавать имя диска: d:/perlbook/file1.doc

Любой файл можно открыть в одном из следующих режимов: чтения, записи или добавления в конец файла. Это осуществляется присоединением соответствующего префикса к имени файла:
  • < (чтение)
  • > (запись)
  • >> (добавление)
    Если префикс опущен, то по умолчанию файл открывается в режиме чтения.
    Запись информации в файл, открытый в режиме записи, осуществляется в начало файла, что приводит к уничтожению содержащейся в нем до его открытия информации.
    Информация, содержащаяся в файле, открытом в режиме добавления, не уничтожается, новые записи добавляются в конец файла.
    Если при открытии файла в режиме записи или добавления не существует файла с указанным именем, то он создается, что оличает эти режимы открытия файла от режима чтения, при котором файл должен существовать. В противном случае операция открытия завершается с ошибкой и соответствующий дескриптор не создается.

    Perl позволяет открыть файл еще в одном режиме - режиме чтения/записи.
    Для этого перед префиксом чтения <, записи > или добавления >> следует поставить знак +.
    +< - сохраняют содержимое открываемого файла
    +> - сначало очищает содержимое открываемого файла
    +>> - сохраняют содержимое открываемого файла, запись в файл всегда осуществляется в конец содержимого файла

  • opendir

    Открытие каталога, имя которого равно значению параметра ВЫРАЖЕНИЕ, и связывает его с дескриптором, определяемым параметром ДЕСКРИПТОР. Имена дескрипторов каталогов хранаятся в собственном пространстве имен таблицы имен Perl.
    opendir ДЕСКРИПТОР, ВЫРАЖЕНИЕ

    readlink

    Возвращает значение сиволической ссылки, определяемой параметром ВЫРАЖЕНИЕ, если символические ссылки реализуются операционной системой; в противном случае - фатальная ошибка. Если при получении значения символической ссылки были получены системные ошибки, возвращает неопределенное значение и в специальную переменную $! заносится сообщение об ошибке. Если параметр опущен, используется значение переменной $_.
    readlink [ВЫРАЖЕНИЕ]

    rename

    Переименовывает файл. Возвращает 1 в случае успешного переименования и 0 в противном случае.
    rename СТАРОЕ_ИМЯ, НОВОЕ_ИМЯ

    stat
    В файловой структуре UNIX информация о файле храниться в его индексном дескрипторе (штщву). Структура индексного дескриптора состоит из 13 полей, для которых используются специальные обозначения:
    ПолеОписание
    devНомер устройства в файловой системе
    inoНомер индексного дескриптора
    modeРежим файла (тип и права доступа)
    nlinkКоличество жестких ссылок на файл (в отсутствии ссылок равно 1)
    uidЧисловой идентификатор владельца файла
    gidЧисловой идентификатор группы владельца файла
    rdevИдентификатор устройства (только для специальных файлов)
    sizeРазмер файла в байтах
    atimeВремя последнего обращения к файлу с начала эпохи
    mtimeВремя последнего изменения файла с начала эпохи
    ctimeВремя изменения индексного дескриптора с начала эпохи
    blksizeПредпочтительный размер блока для операций ввода/вывода
    blocksФактическое количество выделенных блоков для размещения файла


    Начало эпохи датируется 1 января 1970 года 0 часов 0 минут.

    Не все перечисленные поля структуры индексного дескриптора поддерживаются всеми файловыми системами.

    Функция stat() предназначена для получения значений полей структуры индексного дескриптора файла. Ее единственным параметорм может быть либо имя файла, либо дескриптор открытого в программе файла. Она возвращает список из 13 элементов, содержащих значения полей структуры индексного дескриптора файла в том порядке, как они перечислены в таблице.
    Типичное использование в программе Perl представлено ниже:
    ($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,
    $atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);

    Присваивание значение полей списку скалярных переменных с идентификаторами, соответствующими названиям полей, способствует лучшей читаемости программы, чем присваивание массиву скаляров:
    @inode = stat($filename);

    В последнем случае получить значение соответствующего поля можно только с помощью индекса, что не совсем удобно, так как нужно помнить номер нужного поля структуры.

    Если при обращении к функции stat() не указан параметр, то она возвращает структуру индексного дескриптора файла, чье имя содержится в специальной переменной $_.

    Функция получения информации о файле при успешном выполнении в списковом контексте возвращает список значений полей структуры индексного дескриптора файла или пустой список в случае неудачного завершения. В скалярном контексте она возвращает булево значение Истина или Ложь в зависимости от результатов своего выполнения.

    Для удобства использования информации о файле функция stat() при успешном выполнении кэширует полученные значения полей. Если вызвать эту функцию со специальным дескриптором файла _ (символ подчеркивания), то она возвратит информацию, хранящуюся в кэше от предыдущего ее вызова. Это позволяет проверять различные атрибуты файла без повторного вызова функции stat() или сохранения результатов ее выполнения в переменных программы.

    Функцию stat() можно использовать для получения структуры индексного дескриптора не только файла, но и жестких ссылок на него, а также каталогов, так как они являются также файлами, блоки данных которых содержат имена файлов каталога и их числовых индексных дескрипторов.

    symlink

    Создание символической ссылки (параметр НОВОЕ_ИМЯ) на файл (параметр СТАРОЕ_ИМЯ). Возвращает 1 в случае успешного создания символической ссылки и 0 в противном случае.
    symlink СТАРОЕ_ИМЯ, НОВОЕ_ИМЯ

    umask

    Устанавливает маску режима доступа процесса, заданную значением параметра ВЫРАЖЕНИЕ (восьмеричное число), и возвращает предыдущее значение маски режима доступа.
    umask ВЫРАЖЕНИЕ

    unlink

    Удаление файлов, определенных параметром СПИСОК. Возвращает количество успешно удаленных файлов.
    unlink СПИСОК

    utime
    Синтаксис :
    utime СПИСОК

    В структуре индексного дескриптора файла существует три поля, в которых храниться время последнего обращения (atime) к файлу, его изменения (mtime) файла и изменения индексного дескриптора (ctime). Функцией utime() можно изменить время последнего обращения и модификации файла. Ее параметром является список, содержащий имена обрабатываемых файлов, причем первые два элемента списка - числовые значения нового времени последнего доступа и модификации:

    @files = ("file1.dat", "file2.dat");
    $now = time;
    utime $now, $now, @files;

    В этом фрагменте кода время последнего доступа и модификации файлов из списка @files изменяется на текущее время, полученное с помощью функции time.

    Отметим, что при выполнении функции utime() изменяется и время последней модификации индексного дескриптора (ctime) - оно устанавливается равным текущему времени. Возвращаемым значением является количество файлов, для которых операция изменения времени последнего доступа и модификации прошла успешно.