Spec-Zone.ru › Perl 5.38

filetest

СОДЕРЖАНИЕ

  • ИМЯ
  • СИНТАКСИС
  • ОПИСАНИЕ
    • Внимательно рассмотрите это
    • Под-псевдоним «access»
    • Ограничения, связанные с _

ИМЯ

filetest - Perl-псевдоним для управления операторами проверки файлов

СИНТАКСИС

$can_perhaps_read = -r "file";	# use the mode bits
{
    use filetest 'access';		# intuit harder
    $can_really_read = -r "file";
}
$can_perhaps_read = -r "file";	# use the mode bits again

ОПИСАНИЕ

Этот псевдоним сообщает компилятору изменить поведение операторов проверки файлов, -r -w -x -R -W -X (см. perlfunc).

По умолчанию операторы проверки файлов используют простые биты доступа, возвращаемые семейством системных вызовов stat(). Однако многие операционные системы имеют дополнительные возможности для определения более сложных прав доступа, например, списки управления доступом (ACL). Для таких сред, use filetest может помочь операторам проверки файлов возвращать результаты, более согласующиеся с другими инструментами.

Утверждения use filetest или no filetest влияют на проверки файлов, определённые в их блоке, вплоть до конца ближайшего содержащего блока (они имеют область действия блока).

В настоящее время реализован только под-псевдоним access. Он включает (или отключает) использование access(), когда оно доступно, то есть, на большинстве UNIX-систем и других POSIX-средах. Подробности см. ниже.

Внимательно рассмотрите это

Биты доступа stat() вероятно подходят для большинства файлов и каталогов на вашей системе, потому что мало кто хочет использовать дополнительные возможности, предлагаемые access(). Но вы можете столкнуться с неожиданными результатами, если ваша программа работает на системе, использующей ACL, так как информация stat() не будет отражать фактические разрешения.

Операции проверки файлов могут немного замедлиться, когда используется псевдоним filetest, потому что проверка битов очень быстрая.

Также обратите внимание, что использование проверок файлов в целях безопасности бесполезно с самого начала: есть возможность возникновения гонок (кто может сказать, что разрешения не изменятся между проверкой и реальной операцией?). Поэтому, если вы серьёзно относитесь к безопасности, просто попробуйте реальную операцию и проверьте её успех — думайте в терминах атомарных операций. Проверки файлов полезнее для задач администрирования файловой системы, когда вам не нужно содержимое элементов на диске.

Под-псевдоним «access»

UNIX и POSIX-системы предоставляют абстрактный системный вызов access(), который следует использовать для запроса прав на чтение, запись и выполнение. Эта функция скрывает различные подходы к дополнительным функциям безопасности, специфичным для операционной системы, таким как списки управления доступом (ACL).

Расширенные возможности проверки файлов используются Perl только тогда, когда аргументом операторов является имя файла, а не дескриптор файла.

Ограничения, связанные с _

Поскольку access() не вызывает stat() (по крайней мере, не так, как это видно Perl), кэш результатов stat "_" не устанавливается. Это означает, что результаты следующих двух проверок отличаются. В первом случае биты stat для /etc/passwd в _, а во втором случае в /etc по-прежнему содержатся биты /etc.

{ -d '/etc';
  -w '/etc/passwd';
  print -f _ ? 'Yes' : 'No';   # Yes
}

{ use filetest 'access';
  -d '/etc';
  -w '/etc/passwd';
  print -f _ ? 'Yes' : 'No';   # No
}

Конечно, если ваша ОС не реализует access(), в этом случае псевдоним игнорируется. Лучше всего не использовать _ в файле, где активен псевдоним проверки файлов!

В качестве побочного эффекта, поскольку _ не работает, операторы проверки файлов со стеком (-f -w $file) также не будут работать.

Это ограничение может быть устранено в будущих версиях Perl.

© 1993–2023 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
https://perldoc.perl.org/5.38.0/filetest

Spec-Zone.ru

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