May 11, 2004 READLINK 2

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