int access(const char *pathname, int mode);
DESCRIPTION
access() checks whether the calling process can access the file pathname. If pathname
is a symbolic link, it is dereferenced.
The mode specifies the accessibility check(s) to be performed, and is either the value
F_OK, or a mask consisting of the bitwiseOR of one or more ofR_OK, W_OK, andX_OK.
F_OK tests for the existence of the file. R_OK, W_OK, and X_OK test whether the file
exists and grants read, write, and execute permissions, respectively.
The check is done using the calling process's real UID and GID, rather than the effec‐
tive IDs as is done when actually attempting an operation (e.g., open(2)) on the file.
This allows set-user-ID programs to easily determine the invoking user's authority.
If the calling process is privileged (i.e., its real UID is zero), then an X_OK check
is successful for a regular file if execute permission is enabled for any of the file
owner, group, or other.
RETURN VALUE
On success (all requested permissions granted), zero is returned. On error (at least
one bit in mode asked for a permission that is denied, or some other error occurred),
-1 is returned, and errno is set appropriately.
ERRORS
access() shall fail if: error的可能错误值
EACCES The requested access would be denied to the file, or search permission is
denied for one of the directories in the path prefix of pathname. (See also
path_resolution(7).)
ELOOP Too many symbolic links were encountered in resolving pathname.
ENAMETOOLONG
pathname is too long.
ENOENT A component of pathname does not exist or is a dangling symbolic link.
ENOTDIR
A component used as a directory in pathname is not, in fact, a directory.
EROFS Write permission was requested for a file on a read-only file system.
access() may fail if:
EFAULT pathname points outside your accessible address space.
EINVAL mode was incorrectly specified.
EIO An I/O error occurred.
ENOMEM Insufficient kernel memory was available.
ETXTBSY
Write access was requested to an executable which is being executed.