Spec-Zone.ru › Elisp

Атрибуты файлов

В этом разделе описаны функции для получения подробной информации о файле, включая номера владельца и группы, число имён, номер inode, размер, а также время доступа и изменения.

Функция: file-newer-than-file-p filename1 filename2

Эта функция возвращает t, если файл filename1 новее файла filename2. Если filename1 не существует, она возвращает nil. Если filename1 существует, а filename2 — нет, она возвращает 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
Функция: file-has-changed-p filename tag

Эта функция возвращает не-nil, если временная метка filename изменилась с момента последнего вызова. При первом вызове для некоторого filename функция записывает время последнего изменения и размер файла и возвращает не-nil, если filename существует. При последующих вызовах для того же filename она сравнивает текущую временную метку и размер с сохранёнными значениями и возвращает не-nil только в том случае, если отличается временная метка, размер или и то и другое. Это полезно, если программа на Lisp должна перечитывать файл при каждом его изменении. С необязательным аргументом tag, который должен быть символом, сравнение размера и времени изменения выполняется только для вызовов с одинаковым тегом.

Функция: file-attributes filename &optional id-format

Эта функция возвращает список атрибутов файла filename. Если указанный файл не существует, она возвращает nil. Эта функция не следует по символическим ссылкам. Необязательный параметр id-format задаёт предпочтительный формат атрибутов UID и GID (см. ниже); допустимые значения — 'string и 'integer. Последнее значение используется по умолчанию, но мы планируем изменить это, поэтому, если вы используете возвращённые UID или GID, следует указать для id-format значение, отличное от nil.

На платформах GNU при работе с локальным файлом эта функция атомарна: если файловая система одновременно изменяется другим процессом, функция возвращает атрибуты файла либо до изменения, либо после него. В противном случае функция не является атомарной: обнаружив состояние гонки, она может вернуть nil либо набор атрибутов, состоящий из значений до и после изменения файла.

Для доступа к элементам этого списка предусмотрены функции-аксессоры. Они упоминаются ниже вместе с описаниями соответствующих элементов.

Элементы списка в порядке следования:

  1. t для каталога, строка для символической ссылки (имя, на которое она указывает) или nil для текстового файла (file-attribute-type).
  2. Число имён файла (file-attribute-link-number). Дополнительные имена, также называемые жёсткими ссылками, можно создавать с помощью функции add-name-to-file (см. Изменение имён и атрибутов файлов).
  3. UID файла, обычно в виде строки (file-attribute-user-id). Однако, если ему не соответствует пользователь с именем, значение является целым числом.
  4. Аналогично, GID файла (file-attribute-group-id).
  5. Время последнего доступа в виде временной метки Lisp (file-attribute-access-time). Временная метка имеет формат current-time (см. Время суток) и округляется до точности временных меток файловой системы; например, в некоторых файловых системах на основе FAT записывается только дата последнего доступа, поэтому это значение всегда будет соответствовать полуночи дня последнего доступа.
  6. Время последнего изменения в виде временной метки Lisp (file-attribute-modification-time). Это время последнего изменения содержимого файла.
  7. Время последнего изменения состояния в виде временной метки Lisp (file-attribute-status-change-time). Это время последнего изменения битов режима доступа файла, его владельца и группы, а также прочих сведений о файле, хранящихся в файловой системе помимо его содержимого.
  8. Размер файла в байтах (file-attribute-size).
  9. Режимы файла в виде строки из десяти букв или дефисов, как в ‘ls -l’ (file-attribute-modes).
  10. Неопределённое значение, присутствующее для обратной совместимости.
  11. Номер inode файла (file-attribute-inode-number), неотрицательное целое число.
  12. Идентификатор файловой системы для устройства, на котором находится файл (file-attribute-device-number), целое число или cons-ячейка из двух целых чисел. Последний вариант иногда используется для удалённых файлов, чтобы отличать удалённые файловые системы от локальных.

Номера inode и устройства файла вместе дают достаточно информации, чтобы различить любые два файла в системе: ни у каких двух файлов значения обоих этих атрибутов не могут совпадать. Этот кортеж, уникально идентифицирующий файл, возвращает 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

имеет номер inode 6473924464520138.

1014478468

находится на устройстве файловой системы с номером 1014478468.

Функция: file-nlinks filename

Эта функция возвращает число имён (то есть жёстких ссылок) файла filename. Если файл не существует, функция возвращает 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

Copyright © 1990-1996, 1998-2026 Free Software Foundation, Inc.
Licensed under the GNU GPL license.
https://www.gnu.org/software/emacs/manual/html_node/elisp/File-Attributes.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API