Spec-Zone.ru › Elisp

Тестирование доступности

Эти функции проверяют разрешение на чтение, запись или выполнение файла. Если не указано иное, они следуют символическим ссылкам. См. Типы файлов.

В некоторых операционных системах более сложные наборы разрешений на доступ могут быть заданы с помощью таких механизмов, как списки управления доступом (ACL). См. Расширенные атрибуты для получения и задания этих разрешений.

Функция: file-exists-p имя_файла

Эта функция возвращает t если файл с именем имя_файла, по-видимому, существует. Это не означает, что вы обязательно можете прочитать файл, только что вы, вероятно, можете получить его атрибуты. (В системах GNU и других системах, аналогичных POSIX, это верно, если файл существует и у вас есть разрешение на выполнение в содержащих его каталогах, независимо от разрешений самого файла.)

Если файл не существует или возникли проблемы с определением его существования, эта функция возвращает nil.

Каталоги являются файлами, поэтому file-exists-p может вернуть t при получении каталога. Однако, поскольку file-exists-p следует символическим ссылкам, она возвращает t для имени символической ссылки только если целевой файл существует.

Функция: file-readable-p имя_файла

Эта функция возвращает t если файл с именем имя_файла существует и вы можете его прочитать. В противном случае она возвращает nil.

Функция: file-executable-p имя_файла

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

Функция: file-writable-p имя_файла

Эта функция возвращает t если файл имя_файла может быть вами записан или создан, и nil в противном случае. Файл является записываемым, если он существует и вы можете в него записать. Он создаваемый, если он не существует, но его родительский каталог существует и вы можете писать в этот каталог.

В примере ниже foo не является записываемым, потому что родительский каталог не существует, даже если пользователь мог бы создать такой каталог.

(file-writable-p "~/no-such-dir/foo")
     ⇒ nil
Функция: file-accessible-directory-p имя_каталога

Эта функция возвращает t если у вас есть разрешение на открытие существующих файлов в каталоге с именем имя_каталога как файл; в противном случае (например, если такого каталога нет), она возвращает nil. Значение имя_каталога может быть либо именем каталога (например, /foo/), либо именем файла, являющегося каталогом (например, /foo, без конечного слеша).

Например, из следующего мы делаем вывод, что любая попытка прочитать файл в /foo/ приведет к ошибке:

(file-accessible-directory-p "/foo")
     ⇒ nil
Макрос: with-existing-directory тело…

Этот макрос гарантирует, что default-directory привязан к существующему каталогу перед выполнением тело. Если default-directory уже существует, это предпочтительнее, а в противном случае используется какой-либо другой каталог. Этот макрос может быть полезным, например, при вызове внешней команды, которая требует, чтобы она выполнялась в существующем каталоге. Выбранный каталог не гарантируется как записываемый.

Функция: access-file имя_файла строка

Если вы можете прочитать имя_файла, эта функция возвращает nil; в противном случае она сигнализирует об ошибке, используя строка как текст сообщения об ошибке.

Функция: file-ownership-preserved-p имя_файла &опционально группа

Эта функция возвращает t если удаление файла имя_файла и последующее его создание заново сохранит владельца файла неизменным. Она также возвращает t для несуществующих файлов.

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

Эта функция не следует символическим ссылкам.

Функция: file-modes имя_файла &опционально флаг

Эта функция возвращает биты режима имя_файла — целое число, обобщающее разрешения на чтение, запись и выполнение. Эта функция следует символическим ссылкам. Если файла не существует, возвращаемое значение равно nil.

См. Разрешения на файлы в Руководстве GNU Coreutils Manual для описания битов режима. Например, если младший бит равен 1, файл выполняется всеми пользователями; если второй младший бит равен 1, файл записывается всеми пользователями и т. д. Наибольшее возможное значение равно 4095 (7777 в восьмеричной системе), что означает, что все имеют разрешение на чтение, запись и выполнение, установлен бит SUID как для других, так и для группы, и установлен бит sticky.

По умолчанию эта функция следует символическим ссылкам. Однако, если необязательный аргумент флаг является символом nofollow, эта функция не следует имя_файла, если это символическая ссылка; это может помочь предотвратить случайное получение битов режима файла где-то еще и более согласуется с file-attributes (см. Атрибуты файлов).

См. Изменение файлов для функции set-file-modes, которая может использоваться для задания этих разрешений.

(file-modes "~/junk/diffs" 'nofollow)
     ⇒ 492               ; Decimal integer.
(format "%o" 492)
     ⇒ "754"             ; Convert to octal.
(set-file-modes "~/junk/diffs" #o666 'nofollow)
     ⇒ nil
$ ls -l diffs
-rw-rw-rw- 1 lewis lewis 3063 Oct 30 16:00 diffs

Примечание для MS-DOS: В MS-DOS нет такого понятия, как бит режима исполняемого файла. Таким образом, file-modes считает файл исполняемым, если его имя заканчивается одним из стандартных расширений исполняемых файлов, таких как .com, .bat, .exe и некоторые другие. Файлы, начинающиеся с POSIX-стандартной подписи '#!', такие как сценарии shell и Perl, также считаются исполняемыми. Каталоги также сообщаются как исполняемые для совместимости с POSIX. Эти соглашения также следуют file-attributes (см. Атрибуты файлов).

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/Testing-Accessibility.html

Spec-Zone.ru

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