Шаг 30.
Доступ к файлу. Функция open()

    На этом шаге мы рассмотрим функцию open().

    Как мы уже знаем, для доступа к файлу из программы Perl необходим дескриптор. Дескриптор файла создается функцией open(), которая является списковой операцией Perl:

    open ДЕСКРИПТОР, ИМЯ_ФАЙЛА; 
    open ДЕСКРИПТОР;

    При выполнении операции open с заданным в параметрах именем файла открывается соответствующий файл и создается дескриптор этого файла. В качестве дескриптора файла в функции open() можно использовать выражение - его значение и будет именем дескриптора. Имя файла задается непосредственно в виде строкового литерала или выражения, значением которого является строка. Операция open без имени файла открывает файл, имя которого содержится в скалярной переменной $ДЕСКРИПТОР, которая не может быть лексической переменной, определенной функцией my(). Следующий пример демонстрирует использование операции open() для открытия файлов.

#! perl -w 

$var = "out.dat"; 
$FILE4 = "file4.dat";
open FILE1, "in.dat"; # Имя файла задано строкой.
open FILE2, $var;     # Имя файла задано переменной.
open FILE3, "/perlourbook/01/".$var; # Имя файла вычисляется в выражении.
open FILE4;           # Имя файла в переменной $FILE4.

   


    Замечания.
  1. Если задано не полное имя файла, то открывается файл с указанным именем и расположенный в том же каталоге, что и программа Perl. Можно задавать полное имя файла (см. третий оператор open примера), однако следует иметь в виду, что оно зависит от используемой операционной системы. Например, в Windows следует обязательно задавать имя диска: d:/perlourbook/01/chapter1.doc.
  2. В системе UNIX можно открыть достаточно много файлов, тогда как в DOS и Windows количество открытых файлов зависит от установленного значения переменной окружения FILE и варьируется от 20 до 50 одновременно открытых файлов.

    Любой файл можно открыть в одном из следующих режимов:

    Это осуществляется присоединением соответствующего префикса к имени файла:

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

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


    Замечание. Некоторые операционные системы требуют устанавливать указатель чтения/записи файла при переключении с операций чтения на операции записи. В Perl для этого предназначена функция seek(), описание которой будет дано несколько позже.

    На следующем шаге мы рассмотрим функцию sysopen().




Предыдущий шаг Содержание Следующий шаг