ACCESS(2)

NAME
access - check user's permissions for a file

SYNOPSIS
#include <unistd.h>

int access(const char *pathname, int mode);

DESCRIPTION
access checks whether the process would be allowed to read, write or test for existence of the file (or other file system object) whose name is pathname. mode is a mask consisting of one or more of R_OK, W_OK, X_OK and F_OK. R_OK, W_OK and X_OK request testing for reading, writing and executing the file, respectively. F_OK requests checking whether merely testing for the existence of the file would be allowed (this depends on the permissions of the directories in the path to the file, as given in pathname.) The check is done with the process's real uid and gid, rather than with the effective ids as is done when actually attempting an operation. This is to allow set-UID programs to easily determine the invoking user's authority. Only access bits are checked, not the file type or contents. Therefore, if a directory is found to be "writable," it probably means that files can be created in the directory, and not that the directory can be written as a file. Similarly, a DOS file may be found to be "executable," but the execve(2) call will still fail.

RETURN VALUE
On success, zero is returned. On error, -1 is returned, and errno is set appropriately.

ERRORS

EACCES
    The requested access would be denied, either to the file itself or one of the directories in pathname.

EFAULT
    pathname points outside your accessible address space.

EINVAL
    mode was incorrectly specified.

ENAMETOOLONG
    pathname is too long.

ENOENT
    A directory component in pathname would have been accessible but does not exist or was a dangling symbolic link.

ENOTDIR
    A component used as a directory in pathname is not, in fact, a directory.

ENOMEM
    Insufficient kernel memory was available.

ELOOP
    pathname contains a reference to a circular symbolic link, i.e., a symbolic link containing a reference to itself.

CONFORMING TO
SVID, AT&T, POSIX, X/OPEN, BSD 4.3

SEE ALSO
stat(2), open(2), chmod(2), chown(2), setuid(2), setgid(2).