table of contents
LINKAT(2) | Руководство программиста Linux | LINKAT(2) |
ИМЯ¶
linkat - создаёт файловую ссылку относительно файловых дескрипторов каталогов
ОБЗОР¶
#include <fcntl.h> /* определения констант AT_* */ #include <unistd.h> int linkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags);
Требования
макроса
тестирования
свойств
для glibc (см.
feature_test_macros(7)):
linkat():
- Начиная с glibc 2.10:
- _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
- До glibc 2.10:
- _ATFILE_SOURCE
ОПИСАНИЕ¶
Системный вызов linkat() работает также как системный вызов link(2), за исключением случаев, описанных в данной справочной странице.
Если в oldpath задан относительный путь, то он считается относительно каталога, на который ссылается файловый дескриптор olddirfd (а не относительно текущего рабочего каталога вызывающего процесса, как это делается в link(2)).
Если в oldpath задан относительный путь и olddirfd равно специальному значению AT_FDCWD, то oldpath рассматривается относительно текущего рабочего каталога вызывающего процесса (как link(2)).
Если в oldpath задан абсолютный путь, то olddirfd игнорируется.
Значение newpath интерпретируется как oldpath, за исключением того, что относительный путь интерпретируется относительно каталога, на который ссылается файловый дескриптор newdirfd.
По умолчанию, linkat() не разыменовывает oldpath, если это символьная ссылка (подобно link(2)). Начиная с Linux 2.6.18 в flags можно указать AT_SYMLINK_FOLLOW, и тогда значение oldpath будет разыменовано, если это символьная ссылка. До ядра 2.6.18 аргумент flags не использовался и должен был быть равен 0.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ¶
При успешном выполнении linkat() возвращается 0. При ошибке возвращается -1, а в errno содержится код ошибки.
ОШИБКИ¶
В linkat() могут возникнуть те же ошибки, что и в link(2). Также, в linkat() могут возникнуть следующие ошибки:
ВЕРСИИ¶
Вызов linkat() был добавлен в ядро Linux версии 2.6.16; поддержка в glibc доступна с версии 2.4.
СООТВЕТСТВИЕ СТАНДАРТАМ¶
POSIX.1-2008.
ЗАМЕЧАНИЯ¶
Смотрите в openat(2) объяснение необходимости linkat().
СМОТРИТЕ ТАКЖЕ¶
2012-05-04 | Linux |