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