text: #include <unistd.h>
  #include <fcntl.h> /* Definition of AT_* constants */ #include <unistd.h>".
  The().
  On success, zero is returned. On error, −1 is
  returned, and
  errno is set
  appropriately.
  Write access to the directory containing
  newpath is denied, or
  search permission is denied for one of the directories
  in the path prefix of
  oldpath or
  newpath. (See also
  path_resolution(7).)
  The user's quota of disk blocks on the filesystem has been exhausted.
  newpath
  already exists.
  oldpath or
  newpath points
  outside your accessible address space.
  An I/O error occurred.
  Too many symbolic links were encountered in
  resolving
  oldpath or
  newpath..
  oldpath or
  newpath was too
  long.
  A directory component in
  oldpath or
  newpath does not exist or
  is a dangling symbolic link.
  Insufficient kernel memory was available.
  The device containing the file has no room for the new directory entry.
  A component used as a directory in
  oldpath or
  newpath is not, in fact,
  a directory.
  oldpath is a
  directory.
  The filesystem containing
  oldpath and
  newpath does not support
  the creation of hard links.
  The caller does not have permission to create a hard
  link to this file (see the description of
  /proc/sys/fs/protected_hardlinks in
  proc(5)).
  oldpath is
  marked immutable or append-only. (See ioctl_iflags(2).)
  The file is on a read-only filesystem.
  oldpath and
  newpath are not
  on the same mounted filesystem. (Linux permits a
  filesystem to be mounted at multiple points, but
  link() does not work
  across different mount points, even if the same
  filesystem is mounted on both.)
  The following additional errors can occur for
  linkat():
  olddirfd or
  newdirfd is not
  a valid file descriptor.
  An invalid flag value was specified in
  flags.
  AT_EMPTY_PATH was
  specified in
  flags, but the caller did
  not have the
  CAP_DAC_READ_SEARCH capability.
  An attempt was made to link to the
  /proc/self/fd/NN file corresponding
  to a file descriptor created with
  open(path, O_TMPFILE | O_EXCL, mode);
  oldpath is a
  relative pathname and
  olddirfd refers to a
  directory that has been deleted, or
  newpath is a relative
  pathname and
  newdirfd refers to a
  directory that has been deleted.
  oldpath is
  relative and
  olddirfd is a file
  descriptor referring to a file other than a directory;
  or similar for
  newpath and
  newdirfd
  AT_EMPTY_PATH was
  specified in
  flags,
  oldpath is an empty
  string, and
  olddirfd refers to a
  directory.
  linkat() was added to Linux
  in kernel 2.6.16; library support was added to glibc in
  version 2.4.
  link(): SVr4, 4.3BSD,
  POSIX.1-2001 (but see NOTES), POSIX.1-2008.
  linkat(): POSIX.1-2008.
  Hard().)