LINKAT(2) | Linux Programmer's Manual | LINKAT(2) |
NAME
linkat - create a file link relative to directory file descriptorsSYNOPSIS
#include<fcntl.h>
/*
Definition
of
AT_*
constants
*/ #include
<unistd.h>
int linkat(int olddirfd , const char * oldpath ,
int newdirfd , const char * newpath , int flags );
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
- Since glibc 2.10:
- _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
- Before glibc 2.10:
- _ATFILE_SOURCE
DESCRIPTION
The linkat() system call operates in exactly the same way as link(2), except for the differences described in this manual page.- AT_EMPTY_PATH (since Linux 2.6.39)
- If oldpath is an empty string, create a link to the file referenced by olddirfd (which may have been obtained using the open(2) O_PATH flag). In this case, olddirfd can refer to any type of file, not just a directory. The caller must have the CAP_DAC_READ_SEARCH capability in order to use this flag; this prevents arbitrary users from creating hard links using file descriptors received via a UNIX domain socket (see the discussion of SCM_RIGHTS in unix(7)).
- AT_SYMLINK_FOLLOW (since Linux 2.6.18)
- By default, linkat(), does not dereference oldpath if it is a symbolic link (like link(2)). The flag AT_SYMLINK_FOLLOW can be specified in flags to cause oldpath to be dereferenced if it is a symbolic link.
Before kernel 2.6.18, the flags argument was unused, and had to be specified as 0.
RETURN VALUE
On success, linkat() returns 0. On error, -1 is returned and errno is set to indicate the error.ERRORS
The same errors that occur for link(2) can also occur for linkat(). The following additional errors can occur for linkat():- EBADF
- olddirfd or newdirfd is not a valid file descriptor.
- ENOENT
- AT_EMPTY_PATH was specified in flags, but the caller did not have the CAP_DAC_READ_SEARCH capability.
- ENOTDIR
- ENOTDIR
- oldpath is relative and olddirfd is a file descriptor referring to a file other than a directory; or similar for newpath and newdirfd
VERSIONS
linkat() was added to Linux in kernel 2.6.16; library support was added to glibc in version 2.4.CONFORMING TO
POSIX.1-2008.NOTES
See openat(2) for an explanation of the need for linkat().SEE ALSO
link(2), openat(2), path_resolution(7), symlink(7)COLOPHON
This page is part of release 3.53 of the Linux man-pages project. A description of the project, and information about reporting bugs, can be found at http://www.kernel.org/doc/man-pages/.2013-07-21 | Linux |