Provided by: manpages-dev_3.35-0.1ubuntu1_all bug

NAME

       openat - open a file relative to a directory file descriptor

SYNOPSIS

       #include <fcntl.h>

       int openat(int dirfd, const char *pathname, int flags);
       int openat(int dirfd, const char *pathname, int flags, mode_t mode);

   Feature Test Macro Requirements for glibc (see feature_test_macros(7)):

       openat():
           Since glibc 2.10:
               _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
           Before glibc 2.10:
               _ATFILE_SOURCE

DESCRIPTION

       The  openat()  system  call  operates  in  exactly the same way as open(2), except for the
       differences described in this manual page.

       If the pathname given in pathname is relative, then it  is  interpreted  relative  to  the
       directory  referred  to  by the file descriptor dirfd (rather than relative to the current
       working directory of the calling process, as is done by open(2) for a relative pathname).

       If pathname is relative and  dirfd  is  the  special  value  AT_FDCWD,  then  pathname  is
       interpreted  relative  to  the  current  working  directory  of  the calling process (like
       open(2)).

       If pathname is absolute, then dirfd is ignored.

RETURN VALUE

       On success, openat() returns a new file descriptor.  On error, -1 is returned and errno is
       set to indicate the error.

ERRORS

       The  same  errors  that  occur  for  open(2)  can  also occur for openat().  The following
       additional errors can occur for openat():

       EBADF  dirfd is not a valid file descriptor.

       ENOTDIR
              pathname is relative and dirfd is a file descriptor referring to a file other  than
              a directory.

VERSIONS

       openat() was added to Linux in kernel 2.6.16.

CONFORMING TO

       POSIX.1-2008.  A similar system call exists on Solaris.

NOTES

       openat() and other similar system calls suffixed "at" are supported for two reasons.

       First, openat() allows an application to avoid race conditions that could occur when using
       open(2) to open files in directories other than the current working directory.  These race
       conditions  result  from  the  fact  that  some component of the directory prefix given to
       open(2) could be changed in parallel with the call to open(2).  Such races can be  avoided
       by  opening  a  file  descriptor  for  the target directory, and then specifying that file
       descriptor as the dirfd argument of openat().

       Second, openat() allows the implementation of a per-thread  "current  working  directory",
       via  file  descriptor(s)  maintained  by the application.  (This functionality can also be
       obtained by tricks based on the use of /proc/self/fd/dirfd, but less efficiently.)

SEE ALSO

       faccessat(2), fchmodat(2), fchownat(2), fstatat(2), futimesat(2),  linkat(2),  mkdirat(2),
       mknodat(2),  open(2), readlinkat(2), renameat(2), symlinkat(2), unlinkat(2), utimensat(2),
       mkfifoat(3), path_resolution(7)

COLOPHON

       This page is part of release 3.35 of the Linux man-pages project.  A  description  of  the
       project,  and information about reporting bugs, can be found at http://man7.org/linux/man-
       pages/.