Функции stat и lstat

Операторы проверки файлов хорошо подходят для получения информации об атрибутах, относящихся к конкретному файлу или дескриптору, но они не дают полной картины. Например, ни одна проверка не возвращает количество ссылок на файл или идентификатор пользователя (UID) его владельца. Чтобы получить остальную информацию о файле, вызовите функцию stat, которая дает более или менее всю информацию, возвращаемую системной функцией UNIX stat (вероятно, она расскажет гораздо больше, чем вам захочется знать1). В операнде stat передается файловый дескриптор (в том числе и виртуальный дескриптор_) или выражение, вычисляемое как имя файла. Возвращаемое значение содержит либо пустой список, означающий, что вызов stat завершился неудачей (обычно из-за того, что файл не существует), либо список из 13 чисел, который проще всего описывается следующим списком скалярных переменных:

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

Имена относятся к полям структуры stat, которая подробно описана в man-странице stat(2). Однако с кратким списком самых важных переменных вы можете ознакомиться прямо сейчас:

$dev и $ino
Номер устройства и номер индексного узла, соответствующие файлу.


Вместе они образуют «удостоверение личности» файла. Файл может иметь более одного имени (жесткие ссылки), но комбинация номеров устройства и индексного узла всегда уникальна.

$mode
Набор битов разрешений доступа и еще некоторых битов, соответствующих файлу. Если вы когда-либо использовали команду UNIXls –l для получения подробного (длинного) списка файлов, то заметили, что каждая строка начинается с последовательности вида – rwxr-xr-x. Девять букв и дефисов в разрешениях файла1 соответствуют девяти младшим битам $mode, которые в данном примере складываются в восьмеричное число 0755. Другие биты, помимо 9 младших, описывают другие аспекты информации о файле. При работе с данными $mode обычно используются поразрядные операторы, описанные далее в этой главе.

$nlink
Количество (жестких) ссылок на файл или каталог; определяет количество «истинных» имен данного элемента. Для каталогов значение всегда равно 2 и более, а для файлов оно (чаще всего) равно 1. В результатах ls –l значение $nlink соответствует числу после строки разрешений.

$uid и $gid
Числовые идентификаторы пользователя и группы, определяющие принадлежность файла.

$size
Размер в байтах, возвращаемый оператором проверки файла –s.

$atime, $mtime и $ctime
Три временные метки, представленные в системном формате: 32-разрядные числа, определяющие количество секунд, прошедших с начала эпохи, произвольной отправной точки для измерения системного времени.


В UNIX и ряде других систем эпоха отсчитывается от полуночи начала 1970-года по единому мировому времени, но на некоторых компьютерах используется другая эпоха. Позднее в этой главе приводится более подробная информация о том, как преобразовать временную метку в более удобное значение. Вызов stat для имени символической ссылки возвращает информацию об объекте, на который указывает ссылка, а не о самой ссылке (если только она не указывает на недоступный объект).

Если вам необходима (в целом бесполезная) информация о самой символической ссылке, используйте функцию lstat вместо stat; эта функция возвращает ту же информацию в том же порядке. Если операнд не является символической ссылкой, lstat возвращает ту же информацию, что и stat. По умолчанию в качестве операнда stat и lstat используется переменная $_; это означает, что нижележащий вызов системной функции stat будет выполнен для файла, имя которого содержится в скалярной переменной $_.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Perl на эту тему:
Операторы проверки файлов
Поразрядные операторы
Проверка нескольких атрибутов одного файла
Работа с битовыми строками
Сгруппированная проверка файлов