NAME

readlink - read value of a symbolic link

LIBRARY

Standard C Library (libc, -lc)

SYNOPSIS



ssize_t readlink(const char * restrict path, char * restrict buf, size_t bufsiz)

DESCRIPTION

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.

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 errno.

EXAMPLES

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';

ERRORS

readlink() will fail if:

[ENOTDIR]
A component of the path prefix is not a directory.

[ENAMETOOLONG]
A component of a pathname exceeded {NAME_MAX} characters, or an entire path name exceeded {PATH_MAX} characters.

[ENOENT]
The named file does not exist.

[EACCES]
Search permission is denied for a component of the path prefix.

[ELOOP]
Too many symbolic links were encountered in translating the pathname.

[EINVAL]
The named file is not a symbolic link.

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

[EFAULT]
buf extends outside the process's allocated address space.

SEE ALSO

lstat(2), stat(2), symlink(2), symlink(7)

STANDARDS

The readlink() function conforms to IEEE Std 1003.1-2001 (``POSIX.1'') .

HISTORY

The readlink() function appeared in 4.2BSD. The type returned was changed from

int to

ssize_t in NetBSD2.1.