В этом разделе описаны функции для получения подробной информации о файле, включая идентификаторы владельца и группы, количество имён, номер инода, размер, а также время доступа и модификации.
Эта функция возвращает t, если файл имя-файла1 новее,
чем файл имя-файла2. Если имя-файла1 не существует,
она возвращает nil. Если имя-файла1 существует, но
имя-файла2 — нет, она возвращает t. В противном случае
она сравнивает время последней модификации файлов.
В следующем примере предполагается, что файл aug-19 был записан 19-го числа, aug-20 — 20-го числа, а файл no-file вообще не существует.
(file-newer-than-file-p "aug-19" "aug-20")
⇒ nil
(file-newer-than-file-p "aug-20" "aug-19")
⇒ t
(file-newer-than-file-p "aug-19" "no-file")
⇒ t
(file-newer-than-file-p "no-file" "aug-19")
⇒ nil
Эта функция возвращает не nil, если временная метка
имя-файла изменилась с момента последнего вызова. При первом
вызове для некоторого имя-файла она запоминает время последней
модификации и размер файла и возвращает не nil, если
имя-файла существует. Впоследствии при вызове для того же
имя-файла она сравнивает текущие временную метку и размер с
запомненными и возвращает не nil, только если либо временная
метка, либо размер (или оба) отличаются. Это полезно, когда программа
на Lisp хочет перечитывать файл при каждом его изменении. С необязательным
аргументом метка, который должен быть символом, сравнения размера
и времени модификации ограничиваются вызовами с той же меткой.
Эта функция возвращает список атрибутов файла имя-файла. Если
указанный файл не существует, она возвращает nil.
Эта функция не переходит по символическим ссылкам.
Необязательный параметр формат-id задаёт предпочтительный формат
атрибутов UID и GID (см. ниже) — допустимые
значения: 'string и 'integer. По умолчанию используется
последнее, но мы планируем это изменить, поэтому вам следует указывать
не nil значение для формат-id, если вы используете
возвращаемые UID или GID.
На платформах GNU при работе с локальным файлом эта функция
атомарна: если файловая система одновременно изменяется каким-либо
другим процессом, эта функция возвращает атрибуты файла либо
до, либо после изменения. В противном случае эта функция не атомарна
и может вернуть nil, если обнаружит состояние гонки, или может
вернуть смесь предыдущих и текущих атрибутов файла.
Для доступа к элементам этого списка предоставлены функции-аксессоры. Аксессоры упоминаются вместе с описаниями элементов ниже.
Элементы списка по порядку:
t для каталога, строка для символической ссылки (имя,
на которое она указывает) или nil для обычного файла
(file-attribute-type).
file-attribute-link-number).
Альтернативные имена, также известные как жёсткие ссылки, можно создавать
с помощью функции add-name-to-file (см. Изменение имён и атрибутов файлов).
file-attribute-user-id). Однако если он не соответствует
именованному пользователю, значение является целым числом.
file-attribute-group-id).
file-attribute-access-time). Временная метка имеет
стиль current-time (см. Время суток) и усекается
до разрешения временных меток файловой системы; например, в некоторых
файловых системах на основе FAT запоминается только дата последнего доступа,
поэтому это время всегда будет содержать полночь дня последнего доступа.
file-attribute-modification-time). Это последнее время,
когда содержимое файла было изменено.
file-attribute-status-change-time). Это время последнего
изменения битов режима доступа к файлу, его владельца и группы, а также
другой информации, хранящейся в файловой системе для файла, помимо
содержимого файла.
file-attribute-size).
file-attribute-modes).
file-attribute-inode-number),
неотрицательное целое число.
file-attribute-device-number), целое число или cons-ячейка из
двух целых чисел. Последнее иногда используется для удалённых файлов,
чтобы отличать удалённые файловые системы от локальных.
Инод и устройство файла вместе дают достаточно информации,
чтобы различать любые два файла в системе — никакие два файла не могут
иметь одинаковые значения для обоих этих атрибутов. Эта пара, уникально
идентифицирующая файл, возвращается функцией file-attribute-file-identifier.
Например, вот атрибуты файла для files.texi:
(file-attributes "files.texi" 'string)
⇒ (nil 1 "lh" "users"
(20614 64019 50040 152000)
(20000 23 0 0)
(20614 64555 902289 872000)
122295 "-rw-rw-rw-"
t 6473924464520138
1014478468)
и вот как интерпретируется результат:
nilне является ни каталогом, ни символической ссылкой.
1имеет только одно имя (имя files.texi в текущем каталоге по умолчанию).
"lh"принадлежит пользователю с именем ‘lh’.
"users"находится в группе с именем ‘users’.
(20614 64019 50040 152000)последний доступ был 23 октября 2012 года в 20:12:03.050040152 UTC.
(Эта временная метка равна (1351023123050040152 . 1000000000),
если current-time-list равен nil.)
(20000 23 0 0)последняя модификация была 15 июля 2001 года в 08:53:43.000000000 UTC.
(Эта временная метка равна (1310720023000000000 . 1000000000),
если current-time-list равен nil.)
(20614 64555 902289 872000)последнее изменение состояния было 23 октября 2012 года в 20:20:59.902289872 UTC.
(Эта временная метка равна (1351023659902289872 . 1000000000),
если current-time-list равен nil.)
122295имеет длину 122295 байт. (Однако он может не содержать 122295 символов, если некоторые байты принадлежат многобайтовым последовательностям, а также если формат окончания строк — CR-LF.)
"-rw-rw-rw-"имеет режим чтения и записи для владельца, группы и всех остальных.
tявляется просто заполнителем; он не несёт никакой информации.
6473924464520138имеет номер инода 6473924464520138.
1014478468находится на устройстве файловой системы с номером 1014478468.
Эта функция возвращает количество имён (т.е. жёстких ссылок), которые
имеет файл имя-файла. Если файл не существует, эта функция
возвращает nil. Обратите внимание, что символические ссылки не влияют
на эту функцию, поскольку они не считаются именами файлов, на которые
они указывают. Эта функция не переходит по символическим ссылкам.
$ ls -l foo* -rw-rw-rw- 2 rms rms 4 Aug 19 01:27 foo -rw-rw-rw- 2 rms rms 4 Aug 19 01:27 foo1
(file-nlinks "foo")
⇒ 2
(file-nlinks "doesnt-exist")
⇒ nil