link(2) System Calls Manual link(2) link, linkat - (libc -lc) #include int link(const char *oldpath, const char *newpath); #include /* AT_* */ #include int linkat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath, int flags); glibc ( feature_test_macros(7)): linkat(): glibc 2.10: _POSIX_C_SOURCE >= 200809L glibc 2.10: _ATFILE_SOURCE link() ( ) . newpath . ( ) "". linkat() linkat() link() . oldpath olddirfd ( link() ). oldpath olddirfd AT_FDCWD oldpath ( link()). oldpath olddirfd. newpath oldpath newdirfd. OR flags: AT_EMPTY_PATH ( 2.6.39) oldpath olddirfd ( open(2) O_PATH). olddirfd . ( O_TMPFILE O_EXCL ). CAP_DAC_READ_SEARCH . Linux _GNU_SOURCE . AT_SYMLINK_FOLLOW ( Linux 2.6.18) linkat() oldpath ( link()). AT_SYMLINK_FOLLOW flags oldpath . procfs AT_EMPTY_PATH : linkat(AT_FDCWD, "/proc/self/fd/", newdirfd, newname, AT_SYMLINK_FOLLOW); Linux 2.6.18 flags 0. openat(2) linkat(). . -1 errno . EACCES newpath oldpath newpath. ( path_resolution(7).) EDQUOT . EEXIST newpath . EFAULT oldpath newpath . EIO /. ELOOP oldpath newpath. EMLINK oldpath . ext4(5) dir_index 65,000 btrfs(5) 65,535 . ENAMETOOLONG oldpath newpath . ENOENT oldpath newpath . ENOMEM . ENOSPC . ENOTDIR oldpath newpath . EPERM oldpath . EPERM oldpath newpath . EPERM ( Linux 3.6) ( /proc/sys/fs/protected_hardlinks proc_sys_fs(5)). EPERM oldpath . ( FS_IOC_SETFLAGS(2const).) EROFS . EXDEV oldpath newpath . ( Linux link() .) linkat(): EBADF oldpath (newpath) olddirfd (newdirfd) AT_FDCWD . EINVAL (flag) flags. ENOENT AT_EMPTY_PATH flags CAP_DAC_READ_SEARCH. ENOENT /proc/self/fd/NN open(path, O_TMPFILE | O_EXCL, mode); open(2). ENOENT /proc/self/fd/NN . ENOENT oldpath olddirfd newpath newdirfd . ENOTDIR oldpath olddirfd newpath newdirfd EPERM AT_EMPTY_PATH flags oldpath olddirfd . POSIX.1-2001 link() oldpath . Linux 2.0 Linux : oldpath newpath () ( newpath oldpath). Linux. POSIX.1-2008 link() oldpath . linkat(). glibc linkat() glibc link() AT_SYMLINK_FOLLOW. oldpath newpath glibc /proc/self/fd olddirfd newdirfd. POSIX.1-2024. link() 4.3BSD, SVr4, POSIX.1-1988 ( VERSIONS). linkat() POSIX.1-2008, glibc 2.4, Linux 2.6.16. link() . symlink(2) . NFS NFS . stat(2) . ln(1), open(2), rename(2), stat(2), symlink(2), unlink(2), path_resolution(7), symlink(7) 3 . . : . 6.18 11 2026 link(2)