Мы знаем, что в файловой системе 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);
В последнем случае получить значение соответствующего поля можно только с помощью индекса, что не совсем удобно, так как надо помнить номер нужного поля структуры.
| Замечание |
|
| Если операционная система не поддерживает символические ссылки, то обращение к функции Istat {} заменяется обращением к функции stat (). |
| Операция |
Проверяемый атрибут |
|
-r |
Файл может читаться эффективным uid/gid |
|
-W |
Записывать в файл может эффективный uid/gid |
|
-х |
Файл может выполняться эффективным uid/gid |
|
-о |
Владельцем файла является эффективный uid |
|
-R |
Файл может читаться действительным uid/gid |
|
-W |
Записывать в файл может действительный uid/gid |
|
-X |
Файл может выполняться действительный uid/gid |
|
-0 |
Владельцем файла является действительный uid |
|
-е |
Файл существует |
|
-Z |
Размер файла равен нулю |
|
-S |
Размер файла отличен от нуля (возвращается размер) |
|
-f |
Файл является обычным (plain) файлом |
|
-d |
Файл является каталогом |
|
-1 |
Файл является символической ссылкой |
|
-Р |
Файл является именованным программным каналом (FIFO) или проверяемый дескриптор связан с программным каналом |
|
-S |
Файл является сокетом |
|
-b |
Файл является специальным блочным файлом |
|
™ С |
Файл является специальным символьным файлом |
|
-t |
Дескриптор файла связан с терминалом |
|
-и |
У файла установлен бит setuid |
|
-g |
У файла установлен бит setgid |
|
-k |
У файла установлен бит запрета (sticky bit) |
|
-k |
У файла установлен бит запрета (sticky bit) |
|
-т |
Файл является текстовым файлом. |
|
-b |
Файл является двоичным (противоположным текстовому) |
|
-м |
Возраст файла в днях на момент выполнения программы |
|
-А |
То же для времени последнего обращения к файлу |
|
-С |
То же для времени последней модификации индексного дескриптора файла |