Иллюстрированный самоучитель по Perl


         

Получение информации о файле


Мы знаем, что в файловой системе UNIX информация о файле хранится в его индексном дескрипторе (inode). Структура индексного дескриптора состоит из 13 полей, для которых используются специальные обозначения. Все они перечислены в табл. 7.2.

Таблица 7.2. Структура индексного дескриптора

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

Замечание

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

 

Замечание

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

Для получения значений полей структуры индексного дескриптора файла в Perl предназначена функция stato. Ее единственным параметром может быть либо имя файла, либо дескриптор открытого в программе файла. Она возвращает список из 13 элементов, содержащих значения полей структуры индексного дескриптора файла в том порядке, как они перечислены в табл. 7.2. Типичное использование в программе Perl представлено ниже

($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size, $atime,$mtime,$ctime,$blksize,$blocks) = stat($filename);

Присваивание значений полей списку скалярных переменных с идентификаторами, соответствующими названиям полей, способствует лучшей читаемости программы, чем присваивание массиву скаляров:

@inode = stat($filename);

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



Содержание  Назад  Вперед