Scroll to navigation

FSTATAT(2) Руководство программиста Linux FSTATAT(2)

ИМЯ

fstatat - получает состояние файла, определяемого относительно файлового дескриптора каталога

ОБЗОР

#include <fcntl.h> /* определения констант AT_* */
#include <sys/stat.h>

int fstatat(int dirfd, const char *pathname, struct stat *buf,
            int flags);


Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

fstatat():

Начиная с glibc 2.10:
_XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
До glibc 2.10:
_ATFILE_SOURCE

ОПИСАНИЕ

Системный вызов fstatat() работает также как системный вызов stat(2), за исключением случаев, описанных в данной справочной странице.

Если в pathname задан относительный путь, то он считается относительно каталога, на который ссылается файловый дескриптор dirfd (а не относительно текущего рабочего каталога вызывающего процесса, как это делается в stat(2)).

Если в pathname задан относительный путь и dirfd равно специальному значению AT_FDCWD, то pathname рассматривается относительно текущего рабочего каталога вызывающего процесса (как stat(2)).

Если в pathname задан абсолютный путь, то dirfd игнорируется.

Значение flags может быть 0, или включать один или более следующих флагов:

Не выполнять автоматическое монтирование конечного компонента («basename») pathname, если это каталог, который является точкой монтирования. Это позволяет вызывающему получить атрибуты точки монтирования (а не расположения, где её предполагалось смонтировать). Этот флаг можно использовать в инструментах, сканирующих каталоги, для предотвращения массового автоматического монтирования каталогов в их точки монтирования. Флаг AT_NO_AUTOMOUNT не учитывается, если к точке уже уже была выполнено монтирование.
Если значение pathname является символьной ссылкой, не разыменовывать её, а вернуть информацию о самой ссылке, как это делается в lstat(2). (По умолчанию, fstatat() разыменовывает символьные ссылки как и stat(2).)

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении fstatat() возвращает 0; при ошибке — -1, а в errno задаётся причина ошибки.

ОШИБКИ

В fstatat() могут возникнуть те же ошибки, что и в stat(2). Также, в fstatat() могут возникнуть следующие ошибки:

dirfd не является правильным файловым дескриптором.
Указано неверное значение в flags.
Значение pathname содержит относительный путь и dirfd содержит файловый дескриптор, указывающий на файл, а не на каталог.

ВЕРСИИ

Вызов fstatat() был добавлен в ядро Linux версии 2.6.16; поддержка в glibc доступна с версии 2.4.

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2008. Подобный системный вызов есть в Solaris.

ЗАМЕЧАНИЯ

Смотрите в openat(2) объяснение необходимости fstatat().

Нижележащий системный вызов, используемый обёрточной функцией fstatat() в glibc, на самом деле вызывает fstatat64().

СМОТРИТЕ ТАКЖЕ

openat(2), stat(2), path_resolution(7), symlink(7)

2012-05-04 Linux