access(2)
NAME
access, eaccess - check accessibility of a file
LIBRARY
Standard C Library (libc, -lc)
SYNOPSIS
#include <unistd.h> int access(const char *path, int mode); int eaccess(const char *path, int mode);
DESCRIPTION
- The access() and eaccess() system calls check the accessi
- bility of the
file named by the path argument for the access permissions - indicated by
the mode argument. The value of mode is either the bitwise - inclusive OR
of the access permissions to be checked (R_OK for read per - mission, W_OK
for write permission, and X_OK for execute/search permis - sion), or the
existence test (F_OK). - For additional information, see the File Access Permission
- section of
intro(2). - The eaccess() system call uses the effective user ID and the
- group access
list to authorize the request; the access() system call uses - the real
user ID in place of the effective user ID, the real group ID - in place of
the effective group ID, and the rest of the group access - list.
- Even if a process's real or effective user has appropriate
- privileges and
indicates success for X_OK, the file may not actually have - execute permission bits set. Likewise for R_OK and W_OK.
RETURN VALUES
- The function returns the value 0 if successful; otherwise
- the value -1 is
returned and the global variable errno is set to indicate - the error.
ERRORS
Access to the file is denied if:
- [ENOTDIR] A component of the path prefix is not a
- directory.
- [ENAMETOOLONG] A component of a pathname exceeded 255
- characters, or
- an entire path name exceeded 1023 charac
- ters.
- [ENOENT] The named file does not exist.
- [ELOOP] Too many symbolic links were encountered
- in translat
- ing the pathname.
- [EROFS] Write access is requested for a file on a
- read-only
- file system.
- [ETXTBSY] Write access is requested for a pure pro
- cedure (shared
- text) file presently being executed.
- [EACCES] Permission bits of the file mode do not
- permit the
- requested access, or search permission is
- denied on a
component of the path prefix. - [EFAULT] The path argument points outside the pro
- cess's allo
- cated address space.
- [EIO] An I/O error occurred while reading from
- or writing to
- the file system.
SECURITY CONSIDERATIONS
- The access() system call is a potential security hole due to
- race conditions and should never be used. Set-user-ID and set-group
- ID applications should restore the effective user or group ID, and
- perform actions
directly rather than use access() to simulate access checks - for the real
user or group ID. The eaccess() system call likewise may be - subject to
races if used inappropriately.
SEE ALSO
STANDARDS
- The access() system call is expected to conform to ISO/IEC
- 9945-1:1990
(``POSIX.1'').
HISTORY
- The access() function appeared in Version 7 AT&T UNIX.
- BSD September 21, 2001