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, или включать один или более следующих флагов:

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

AT_SYMLINK_NOFOLLOW
    Если значение pathname является символьной ссылкой, не разыменовывать её, а вернуть информацию о самой ссылке, как это делается в lstat(2). (По умолчанию, fstatat() разыменовывает символьные ссылки как и stat(2).)

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
При успешном выполнении fstatat() возвращает 0; при ошибке — -1, а в errno задаётся причина ошибки.

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

EBADF
    dirfd не является правильным файловым дескриптором.

EINVAL
    Указано неверное значение в flags.

ENOTDIR
    Значение 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)