access(2)
NAME
access − determine accessibility of a file
SYNOPSIS
#include <unistd.h>
int access(char *path, int amode);
DESCRIPTION
path points to a path name naming a file. access() checks the named file for accessibility according to the bit pattern contained in amode, using the real user ID instead of the effective user ID and the real group ID instead of the effective group ID. The value of amode is either the bit-wise inclusive OR of the access permissions to be checked or the existence test. The following symbolic constants, defined in <unistd.h>, test for permissions:
R_OK read
W_OK write
X_OK execute (search)
F_OK check existence of file
Access Control Lists (ACLs)
Read, write and execute/search permissions are checked against the file’s access control list. Each mode is checked separately since different ACL entries might grant different permissions. The real user ID is combined with the process’s real group ID and each group in its supplementary groups list, and the access control list is searched for a match. Search proceeds in order of specificity and ends when one or more matching entries are found at a specific level. More than one u.g or %.g entry can match a user if that user has a non-null supplementary groups list. If any matching entry has the appropriate permission bit set, access is permitted.
access() reports that a shared text file currently open for execution is not writable, regardless of its access control list. It also reports that a file on a read-only file system is not writable. However, access() does not report that a shared text file open for writing is not executable, since the check is not easily done.
RETURN VALUE
If the requested access is permitted, a value of 0 is returned. Otherwise, a value of −1 is returned and errno is set to indicate the error.
ERRORS
Access to the file is denied if one or more of the following is true:
[ENOTDIR] A component of the path prefix is not a directory.
[ENOENT] Read, write, or execute (search) permission is requested for a null path name.
[ENOENT] The named file does not exist.
[EACCES] Search permission is denied on a component of the path prefix.
[EROFS] Write access is requested for a file on a read-only file system.
[ETXTBSY] Write access is requested for a pure procedure (shared text) file that is being executed.
[EACCES] The access control list does not permit the requested access and the real user ID is not a user with appropriate privileges.
[EFAULT] path points outside the allocated address space for the process. The reliable detection of this error is implementation dependent.
[ELOOP] Too many symbolic links were encountered in translating the path name.
[ENAMETOOLONG]
The length of the specified path name exceeds PATH_MAX bytes, or the length of a component of the path name exceeds NAME_MAX bytes while _POSIX_NO_TRUNC is in effect.
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 permissions checked with respect to the “group” mode bits, and all others have permissions checked with respect to the “other” mode bits.
access() reports that a file currently open for execution is not writable, regardless of the setting of its mode.
WARNINGS
If the path is valid and the real user ID is super-user, and the access requested is not X_OK, access() always returns 0. If X_OK access is requested for a valid path and the real user ID is super-user and the file is a directory, access always returns 0. If X_OK access is requested for a valid path which is not a directory and the real user ID is super-user, access returns 0 only if at least one execute bit (for user, group, or other) is set in the file’s mode.
Access Control Lists
Access control list descriptions in this entry apply only to standard HP-UX operating systems. If HP-UX BLS software has been installed, access control lists are handled differently. Refer to HP-UX BLS documentation for information about access control lists in the HP-UX BLS environment.
SEE ALSO
chmod(2), setacl(2), stat(2), acl(5), unistd(5).
STANDARDS CONFORMANCE
access(): AES, SVID2, XPG2, XPG3, XPG4, FIPS 151-2, POSIX.1
Hewlett-Packard Company — HP-UX Release 9.0: August 1992