| READLINK(2) | System Calls Manual | READLINK(2) |
readlink,
readlinkat — read value of a
symbolic link
Standard C Library (libc, -lc)
#include
<unistd.h>
ssize_t
readlink(const
char * restrict path,
char * restrict buf,
size_t bufsiz);
ssize_t
readlinkat(int
fd, const char * restrict
path, char * restrict
buf, size_t
bufsiz);
readlink()
places the contents of the symbolic link path in the
buffer buf, which has size
bufsiz. readlink() does not
append a NUL character to
buf.
readlinkat()
works the same way as readlink() except if
path is relative. In that case, it is looked up from a
directory whose file descriptor was passed as fd.
Search permission is required on this directory. fd
can be set to AT_FDCWD in order to specify the
current directory.
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 errno.
A typical use is illustrated in the following piece of code which reads the contents of a symbolic link named /symbolic/link and stores them as null-terminated string:
#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] = '\0';
readlink() and
readlinkat() will fail if:
EACCES]EFAULT]EINVAL]EIO]ELOOP]ENAMETOOLONG]NAME_MAX}
characters, or an entire path name exceeded
{PATH_MAX} characters.ENOENT]ENOTDIR]In addition, readlinkat() will fail
if:
The readlink() function conforms to
IEEE Std 1003.1-2001 (“POSIX.1”).
readlinkat() conforms to IEEE Std
1003.1-2008 (“POSIX.1”).
The readlink() function appeared in
4.2BSD. The type returned was changed from
int to ssize_t in
NetBSD 2.1.
| July 28, 2013 | NetBSD 11.0 |