Spec-Zone.ru › Perl 5.32

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.

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

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

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

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

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

© 1993–2020 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.30.3/filetest

Spec-Zone.ru

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