Функції 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-розрядні числа, що визначають кількість секунд, що минули з початку епохи, довільної відправної точки для вимірювання системного часу.

Якщо вам потрібна (загалом марна) інформація про символічне посилання, використовуйте функцію lstat замість stat; ця функція повертає ту ж інформацію в тому самому порядку. Якщо операнд не є символічним посиланням, lstat повертає ту ж інформацію, що і stat. За умовчанням як операнда stat і lstat використовується змінна $_; це означає, що нижченаведений виклик системної функції stat буде виконано для файлу, ім'я якого міститься в скалярній змінній $_.