Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
ACCESS(2)		      System Calls Manual		     ACCESS(2)

NAME
       access, eaccess,	faccessat -- 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);

       int
       faccessat(int fd, const char *path, int mode, int flag);

DESCRIPTION
       The  access(), eaccess()	and faccessat()	system calls report whether an
       attempt to access the file designated by	their path in the  manner  de-
       scribed by their	mode argument is likely	to succeed.  The value of mode
       is either the bitwise-inclusive OR of the desired permissions (R_OK for
       read  permission,  W_OK	for  write  permission,	and X_OK for execute /
       search permission) or F_OK to simply check whether the file exists.

       For a number of reasons,	these system calls cannot be  relied  upon  to
       give  a	correct	 and  definitive  answer.  They	can at best provide an
       early indication	of the expected	outcome, to be confirmed  by  actually
       attempting  the	operation.   For  existence  checks, either stat(2) or
       lstat(2)	should be used instead.	 See  also  "SECURITY  CONSIDERATIONS"
       below.

       The  eaccess() system call uses the effective user ID and the group ac-
       cess 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.

       See the "DEFINITIONS" section of	intro(2) for additional	information on
       file access permissions and real	vs. effective user and group IDs.

       The faccessat() system call is equivalent to  access()  except  in  the
       case where path specifies a relative path.  In this case	the file whose
       accessibility  is to be determined is located relative to the directory
       associated with the file	descriptor fd instead of the  current  working
       directory.   If faccessat() is passed the special value AT_FDCWD	in the
       fd parameter, the current working directory is used and the behavior is
       identical to a call to access().	 Values	for flag are constructed by  a
       bitwise-inclusive  OR  of  flags	 from  the  following list, defined in
       <fcntl.h>:

       AT_EACCESS
	       The checks are performed	using the  effective  user  and	 group
	       IDs,  like  eaccess(),  instead	of the real user and group ID,
	       like access().

       AT_RESOLVE_BENEATH
	       Only walk paths below the directory specified  by  the  fd  de-
	       scriptor.  See the description of the O_RESOLVE_BENEATH flag in
	       the open(2) manual page.

       AT_EMPTY_PATH
	       If the path argument is an empty	string,	operate	on the file or
	       directory  referenced  by the descriptor	fd.  If	fd is equal to
	       AT_FDCWD, operate on the	current	working	directory.

       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
       Upon successful completion, the value  0	 is  returned;	otherwise  the
       value  -1  is returned and the global variable errno is set to indicate
       the error.

ERRORS
       The access(), eaccess(),	and faccessat()	system calls may fail if:

       [EINVAL]		  The value of the mode	argument is invalid.

       [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 characters.

       [ENOENT]		  The named file does not exist.

       [ELOOP]		  Too  many  symbolic links were encountered in	trans-
			  lating the pathname.

       [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 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 process's allo-
			  cated	address	space.

       [EIO]		  An I/O error occurred	while reading from or  writing
			  to the file system.

       [EINTEGRITY]	  Corrupted  data  was detected	while reading from the
			  file system.

       Also, the faccessat() system call may fail if:

       [EBADF]		  The path argument does not specify an	absolute  path
			  and  the fd argument is neither AT_FDCWD nor a valid
			  file descriptor.

       [EINVAL]		  The value of the flag	argument is not	valid.

       [ENOTDIR]	  The path argument is not an absolute path and	fd  is
			  neither  AT_FDCWD  nor  a file descriptor associated
			  with a directory.

       [ENOTCAPABLE]	  path is an absolute path, or contained a ".."	compo-
			  nent leading to a directory outside of the directory
			  hierarchy specified by fd, and the process is	in ca-
			  pability mode.

SEE ALSO
       chmod(2), intro(2), stat(2)

STANDARDS
       The access() system call	is expected to conform to ISO/IEC  9945-1:1990
       ("POSIX.1").   The  faccessat()	system call follows The	Open Group Ex-
       tended API Set 2	specification.

HISTORY
       The access() function appeared in Version 7 AT&T	UNIX.  The faccessat()
       system call appeared in FreeBSD 8.0.

SECURITY CONSIDERATIONS
       The access(), eaccess(),	and faccessat()	system calls  are  subject  to
       time-of-check-to-time-of-use  races  and	 should	not be relied upon for
       file permission enforcement  purposes.	Instead,  applications	should
       perform the desired action using	the requesting user's credentials.

FreeBSD	13.2			 May 21, 2024			     ACCESS(2)

NAME | LIBRARY | SYNOPSIS | DESCRIPTION | RETURN VALUES | ERRORS | SEE ALSO | STANDARDS | HISTORY | SECURITY CONSIDERATIONS

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=eaccess&sektion=2&manpath=FreeBSD+14.1-RELEASE+and+Ports>

home | help