Мы знаем, что в файловой системе 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);
В последнем случае получить значение соответствующего поля можно только с помощью индекса, что не совсем удобно, так как надо помнить номер нужного поля структуры.