Perl использует переменную, называемую типом дескриптора файла, для управления файлами.
Для чтения или записи данных из файла требуется дескриптор файла.
Дескриптор файла — это имя соединения ввода-вывода.
Perl предоставляет три дескриптора файла: STDIN, STDOUT и STDERR, которые представляют стандартный ввод, стандартный вывод и стандартный вывод ошибок соответственно.
Вы можете открыть файлы в Perl, используя следующие методы:
открыть FILEHANDLE, EXPROopen FILEHANDLEsysopen FILEHANDLE, FILENAME, MODE, PERMSsysopen FILEHANDLE, FILENAME, MODE
Описание параметра:
FILEHANDLE: дескриптор файла, используемый для хранения уникального идентификатора файла.
EXPR: выражение, состоящее из имени файла и типа доступа к файлу.
РЕЖИМ: тип доступа к файлу.
PERMS: биты разрешения доступа (биты разрешения).
В следующем коде мы используем функцию open, чтобы открыть файл file.txt в режиме только для чтения (<):
open(DATA, "<file.txt");
< указывает на режим только для чтения.
ДАННЫЕ в коде — это дескриптор файла, используемый для чтения файла. Следующий пример откроет файл и выведет его содержимое:
Следующий код открывает файл file.txt для записи ( > ):
open(DATA, ">file.txt") или die "Файл file.txt не может быть открыт, $!";
> Указывает метод записи.
Если вам нужно открыть файл для чтения и записи, вы можете добавить знак + перед символом > или <:
open(DATA, "+<file.txt"); or die "Файл file.txt не может быть открыт, $!";
Этот метод не удалит исходное содержимое файла. Если вы хотите удалить его, формат будет следующим:
открыть DATA, «+>file.txt» или умереть «Файл file.txt не может быть открыт, $!»;
Если вы хотите добавить данные в файл, вам нужно только открыть файл в режиме добавления перед добавлением данных:
open(DATA,">>file.txt") || die "Файл file.txt не может быть открыт, $!";
>> означает добавление данных в конец существующего файла. Если вам нужно прочитать содержимое добавляемого файла, вы можете добавить знак +:
open(DATA,"+>>file.txt") || die "Файл file.txt не может быть открыт, $!";
В следующей таблице перечислены различные режимы доступа:
| модель | описывать |
|---|---|
| < или р | Откройте в режиме только для чтения и наведите указатель файла на заголовок файла. |
| > или ж | Откройте в режиме записи, наведите указатель файла на заголовок файла и обрежьте размер файла до нуля. Если файл не существует, попробуйте создать его. |
| >> или | Откройте в режиме записи и наведите указатель файла на конец файла. Если файл не существует, попробуйте создать его. |
| +< или г+ | Откройте в режиме чтения-записи и наведите указатель файла на заголовок файла. |
| +> или ш+ | Откройте в режиме чтения-записи, наведите указатель файла на заголовок файла и обрежьте размер файла до нуля. Если файл не существует, попробуйте создать его. |
| +>> или + | Откройте в режиме чтения-записи и наведите указатель файла на конец файла. Если файл не существует, попробуйте создать его. |
Функция sysopen аналогична функции open, за исключением того, что формы их параметров различны.
Следующий пример открывает файл для чтения и записи (+<имя файла):
sysopen(DATA, "file.txt", O_RDWR);
Если вам необходимо очистить файл перед его обновлением, метод записи следующий:
sysopen(DATA, "file.txt", O_RDWR|O_TRUNC );
Вы можете использовать O_CREAT для создания нового файла, O_WRONLY — режим только для записи, O_RDONLY — режим только для чтения.
Параметр PERMS представляет собой восьмеричное значение атрибута, указывающее разрешения после создания файла. Значение по умолчанию — 0x666 .
В следующей таблице перечислены возможные значения режима:
| модель | описывать |
|---|---|
| О_РДВР | Откройте в режиме чтения-записи и наведите указатель файла на заголовок файла. |
| О_RDONLY | Откройте в режиме только для чтения и наведите указатель файла на заголовок файла. |
| О_WRONLY | Откройте в режиме записи, наведите указатель файла на заголовок файла и обрежьте размер файла до нуля. Если файл не существует, попробуйте создать его. |
| O_CREAT | Создать файл |
| O_APPEND | добавить файл |
| O_TRUNC | Усечь размер файла до нуля |
| О_EXCL | Если файл существует при использовании O_CREAT, будет возвращено сообщение об ошибке. Оно может проверить, существует ли файл. |
| О_NONBLOCK | Неблокирующий ввод-вывод позволяет нашей операции либо завершиться успешно, либо немедленно вернуть ошибку, не блокируясь. |
После использования файла его необходимо закрыть, чтобы обновить буферы ввода и вывода, связанные с дескриптором файла. Синтаксис закрытия файла следующий:
закрытьФАЙЛРУЧКАзакрыть
FILEHANDLE — это указанный дескриптор файла, который возвращает true, если он успешно закрыт.
close(DATA) || die "Невозможно закрыть файл";
Существует несколько различных способов чтения и записи информации в файлы:
Основным методом чтения информации из дескриптора открытого файла является оператор <FILEHANDLE>. В скалярном контексте он возвращает одну строку из дескриптора файла. Например:
Когда мы используем оператор <FILEHANDLE>, он возвращает список каждой строки в дескрипторе файла, например, мы можем импортировать все строки в массив.
Реализуйте создание файла import.txt следующего содержания:
$ кот import.txt 123
Прочтите файл import.txt и поместите каждую строку в массив @lines:
Выполняя вышеуказанную программу, результат вывода:
123
Функция xgetc возвращает один символ из указанного FILEHANDLE или STDIN, если он не указан:
getcFILEHANDLEgetc
Если происходит ошибка или дескриптор файла находится в конце файла, возвращается undef.
Функция чтения используется для чтения информации из дескриптора файла буфера.
Эта функция используется для чтения двоичных данных из файла.
прочитать РУКОВОДИТЕЛЬ ФАЙЛА, СКАЛЯР, ДЛИНА, СМЕЩ прочитать РУКОВОДИТЕЛЬ ФАЙЛА, СКАЛЯР, ДЛИНА
Описание параметра:
FILEHANDLE: дескриптор файла, используемый для хранения уникального идентификатора файла.
SCALAR: сохраняет результат. Если OFFSET не указано, данные будут помещены в начало SCALAR. В противном случае данные помещаются после байта OFFSET в SCALAR.
ДЛИНА: длина прочитанного содержимого.
СМЕЩ: смещение.
Возвращает количество прочитанных байтов, если чтение прошло успешно, 0, если достигнут конец файла, и undef, если произошла ошибка.
Для всех функций, которые читают информацию из дескрипторов файлов, основной функцией записи в бэкэнде является печать:
распечатать СПИСОК РУКОВОДИТЕЛЕЙ ФАЙЛОВ распечатать СПИСОК распечатать
Результаты выполнения программы можно отправить на устройство вывода (STDOUT: стандартный вывод) с помощью дескриптора файла и функции печати, например:
напечатайте «Привет, мир!n»;
В следующем примере мы откроем существующий файл file1.txt, прочитаем каждую его строку и запишем в файл file2.txt:
В следующем примере мы переименовываем существующий файл file1.txt в file2.txt, а указанный каталог находится в /usr/codercto/test/:
#!/usr/bin/perlrename ("/usr/codercto/test/file1.txt", "/usr/codercto/test/file2.txt" );Функция renames принимает только два параметра и переименовывает только существующие файлы.
В следующем примере показано, как использовать функцию unlink для удаления файлов:
Вы можете получить местоположение файла с помощью функции Tell и указать местоположение внутри файла с помощью функции поиска :
Функция Tell используется для получения местоположения файла:
скажи FILEHANDLEскажи
Если указан FILEHANDLE, эта функция возвращает позицию указателя файла в байтах. Если не указано, возвращает дескриптор выбранного файла по умолчанию.
Функция Seek() читает или записывает файлы, перемещая указатель чтения и записи файла через дескриптор файла, а также читает и записывает в байтах:
ищите РУЧКУ ФАЙЛА, ПОЛОЖЕНИЕ, ОТКУДА
Описание параметра:
FILEHANDLE: дескриптор файла, используемый для хранения уникального идентификатора файла.
ПОЛОЖЕНИЕ: указывает количество байтов, на которые необходимо переместить дескриптор файла (указатель позиции чтения и записи).
WHENCE: указывает начальную позицию, когда дескриптор файла (указатель позиции чтения и записи) начинает двигаться. Возможные значения: 0, 1 и 2, указывающие начало файла, текущую позицию и конец. файл соответственно.
В следующем примере считывается 256 байт от начала файла:
искать ДАННЫЕ, 256, 0;
Файловые операции Perl также могут сначала проверить, существует ли файл, можно ли его читать и записывать и т. д.
Сначала мы можем создать файл file1.txt следующим образом:
$ cat file1.txt www.codercto.com
Выполняя вышеуказанную программу, результат вывода:
Информация file1.txt: текстовый файл размером 15 байт.
Операторы проверки файлов показаны в следующей таблице:
| Оператор | описывать |
|---|---|
| -А | Время последнего доступа к файлу (единицы измерения: дни) |
| -Б | Это двоичный файл? |
| -С | Время изменения узла индекса файла (inode) (единицы измерения: дни) |
| -М | Время последнего изменения файла (единицы: дни) |
| -О | Файл принадлежит реальному UID |
| -Р | Файлы или каталоги можно читать по реальному UID/GID. |
| -С | Для розетки (розетки) |
| -Т | Это текстовый файл? |
| -W | Файлы или каталоги могут быть записаны с реальным UID/GID. |
| -Х | Файлы или каталоги могут быть выполнены с реальным UID/GID. |
| -б | Для блочных (специальных блочных) файлов (таких как смонтированные диски) |
| -с | Для файлов со специальными символами (например, устройств ввода-вывода) |
| -д | для каталога |
| -е | Имя файла или каталога существует |
| -ф | для обычных файлов |
| -г | Файл или каталог имеет атрибут setgid. |
| -к | В файле или каталоге установлен липкий бит. |
| -л | для символических ссылок |
| -о | Файл принадлежит действительному UID |
| -п | Файл представляет собой именованный канал (FIFO). |
| -р | Файл можно прочитать с действительным UID/GID. |
| -с | Файл или каталог существует, и его значение не равно 0 (возвращает количество байтов). |
| -т | Дескриптор файла — TTY (результат возврата системной функции isatty(); этот тест нельзя использовать для имен файлов) |
| -у | Файл или каталог имеет атрибут setuid. |
| -ш | В файлы можно записывать действительные UID/GID. |
| -х | Файл может быть запущен с действительным UID/GID. |
| -з | Файл существует, и его размер равен 0 (каталог всегда имеет значение false), то есть является ли это пустым файлом. |