p
.Fn readlinkat
works the same way as
.Fn readlink
except if
.Fa path
is relative.
In that case, it is looked up from a directory whose file
descriptor was passed as
.Fa fd .
Search permission is required on this directory.
(These alternatives await a decision about the semantics of O_SEARCH)
Search permission is required on this directory
except if
.Fa fd
was opened with the
.Dv O_SEARCH
flag.
- or -
This file descriptor must have been opened with the
.Dv O_SEARCH
flag.
.Fa fd
can be set to
.Dv AT_FDCWD
in order to specify the current directory.
.Sh RETURN VALUES
The call returns the count of characters placed in the buffer
if it succeeds, or a -1 if an error occurs, placing the error
code in the global variable
.Va errno .
.Sh EXAMPLES
A typical use is illustrated in the following piece of code
which reads the contents of a symbolic link named
a /symbolic/link and stores them as null-terminated string: d -literal -offset indent #include <limits.h> #include <unistd.h> char buf[PATH_MAX]; ssize_t len; if ((len = readlink("/symbolic/link", buf, sizeof(buf)-1)) == -1) error handling; buf[len] = '\e0'; .Ed .Sh ERRORS .Fn readlink and .Fn readlinkat will fail if: l -tag -width Er t Bq Er EACCES Search permission is denied for a component of the path prefix. t Bq Er EFAULT .Fa buf extends outside the process's allocated address space. t Bq Er EINVAL The named file is not a symbolic link. t Bq Er EIO An I/O error occurred while reading from the file system. t Bq Er ELOOP Too many symbolic links were encountered in translating the pathname. t Bq Er ENAMETOOLONG A component of a pathname exceeded rq Dv NAME_MAX characters, or an entire path name exceeded rq Dv PATH_MAX characters. t Bq Er ENOENT The named file does not exist. t Bq Er ENOTDIR A component of the path prefix is not a directory. .El
p In addition, .Fn readlinkat will fail if: l -tag -width Er t Bq Er EBADF .Fa path does not specify an absolute path and .Fa fd is neither .Dv AT_FDCWD nor a valid file descriptor open for reading or searching. t Bq Er ENOTDIR .Fa path is not an absolute path and .Fa fd is a file descriptor associated with a non-directory file. .El .Sh SEE ALSO .Xr lstat 2 , .Xr stat 2 , .Xr symlink 2 , .Xr symlink 7 .Sh STANDARDS The .Fn readlink function conforms to .St -p1003.1-2001 . .Fn readlinkat conforms to .St -p1003.1-2008 . .Sh HISTORY The .Fn readlink function appeared in x 4.2 . The type returned was changed from .Ft int to .Ft ssize_t in .Nx 2.1 .