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-attributes filename &optional id-format

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

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

Например, вот атрибуты файла 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.

(20000 23 0 0)

был последний раз изменён 15 июля 2001 года в 08:53:43 по UTC.

(20614 64555 902289 872000)

был последний раз изменён в статусе 23 октября 2012 года в 20:20:59.902289872 по UTC.

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-2022 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