Язык программирования Perl
Шрифт:
Подробное описание шаблонов и работы функций pack и unpack можно найти в стандартной документации с помощью все той же утилиты чтения документации:
Для чтения двоичных данных или текстовых данных фиксированной длины применяется функция read, которой в качестве аргументов передаются файловый манипулятор, скалярная переменная для вводимых данных и размер считываемого
При работе с данными фиксированной длины обычной практикой является считывание или запись данных в произвольном месте файла, например, при изменении только что считанного блока данных. Для этого нужно позиционировать позицию чтения или записи. Это делается с помощью функции seek, которой передается три аргумента: файловый манипулятор, смещение в байтах и указатель позиции отсчета. Позиция отсчета задается числами: 0 - от начала файла, 1 - от текущей позиции, 2 - от конца файла. Например:
С помощью функции tell, которая возвращает смещение относительно начала файла, можно узнать текущую позицию чтения-записи и использовать ее для дальнейших перемещений по файлу.
В следующем примере увеличивается поле счетчика длиной 2 байта, расположенное в файле с позиции $new_pos:
Операции ввода-вывода с произвольным доступом часто используются для работы с базами данных, основанных на записях фиксированной длины, например, с файлами в формате DBF. Они позволяют организовать быструю выборку данных и запись измененных данных на прежнее место.
Перед выполнением операций ввода-вывода часто требуется узнать информацию об объектах файловой системы. В Perl есть набор унарных операций для удобной проверки различных характеристик файлов и каталогов. Они имеют вид флагов из одной латинской буквы с предшествующим знаком минус, после которого указывается имя проверяемого файла. Полный перечень операций проверки файлов приведен в таблице 9.3.
Таблица 9.3.
Операции | Описание проверок |
---|---|
– r -w -x | Файл доступен для чтения / записи / исполнения (по effective UID+GID) |
– R -W -X | Файл доступен для чтения / записи / исполнения (по real UID+GID) |
– o -O | Файл принадлежит текущему пользователю по effective / real UID |
– e -z | Файл существует (exists) / имеет нулевую длину (zero) |
– s | Файл имеет ненулевой размер: возвращает размер в байтах (size) |
– f -d | Файл является обычным файлом (file) / каталогом (directory) |
– l -S -p | Файл является ссылкой / сокетом / именованным FIFO-каналом (pipe) |
– b -c | Файл является блочным / символьным специальным файлом |
– u -g -k | Для файла установлен бит setuid / setgid / sticky |
– t | Файловый манипулятор связан с терминалом (tty) |
– T -B | Файл является текстовым (text) / двоичным (binary) |
– M -A -C | Время изменения (modification) / доступа (access) / изменения (change) индексного узла (inode) файла в днях относительно времени начала выполнения программы ($^T) |
Вот несколько типичных примеров использования операций проверки файлов для контроля доступности данных:
В Perl есть целый набор встроенных функций для работы с файлами, с помощью которых можно манипулировать с самими файлами, а не с данными, хранящимися в них.
Функция rename переименовывает файл, возвращая логическое значение: 1 при успешном изменении имени и 0 - в противном случае. Ей передаются старое и новое имя файла с абсолютным или относительным путем.
Функция unlink удаляет файл или список файлов, возвращая число 1 при успешном удалении и 0 - при ошибке.
Функция truncate усекает файл до указанного размера и возвращает число 1 в случае успешного выполнения усечения и неопределенное значение undef– при возникновении ошибки. Файл может задаваться именем или файловым манипулятором. Например: