The access() function checks the
accessibility of the file named by path for
the access permissions indicated by amode.
The amode argument is either the bitwise OR
of one or more of the access permissions to be checked
(R_OK for read permission,
W_OK for write permission, and
X_OK for execute/search permission) or the
existence test, F_OK. All components of the
pathname path are checked for access
permissions (including F_OK).

The real user ID is used in place of the effective user ID and the real group
access list (including the real group ID) is used in place of the effective ID
for verifying permission.

If the invoking process has superuser privileges,
access() will always indicate success for
R_OK and
W_OK, regardless of the actual file
permission bits. Likewise, for X_OK, if the
file has any of the execute bits set and path
is not a directory, access() will indicate
success.

The faccessat() function is equivalent to
access() except that where
path specifies a relative path, the file
whose accessibility is checked is determined relative to the directory
associated with file descriptor fd instead of
the current working directory.

If faccessat() is passed the special value
AT_FDCWD (defined in
<fcntl.h>)
in the fd parameter, the current working
directory is used. If flag is also zero, the
behavior is identical to a call to
access().

The flag argument is the bitwise OR of zero or
more of the following values:

Permission bits of the file mode do not permit the requested access, or
search permission is denied on a component of the path prefix. The owner
of a file has permission checked with respect to the “owner”
read, write, and execute mode bits, members of the file's group other than
the owner have permission checked with respect to the
“group” mode bits, and all others have permissions checked
with respect to the “other” mode bits.

access() first appeared as an internal kernel
function in Version 1 AT&T UNIX and was
reimplemented in C before the release of Version 4
AT&T UNIX. It was first promoted to a system call in the
Programmer's Workbench (PWB/UNIX), which was later ported to
Version 7 AT&T UNIX and
2BSD.