READLINK(2) | System Calls Manual | READLINK(2)

# NAME

`readlink`, `readlinkat` — read value of a symbolic link

# SYNOPSIS

`#include <unistd.h>`

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

`#include <fcntl.h>`
`#include <unistd.h>`

ssize_t
`readlinkat`(int fd, const char *path, char *buf, size_t bufsiz);

# DESCRIPTION

The `readlink`() function 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.

The `readlinkat`() function is equivalent to `readlink`() except that where path specifies a relative path, the symbolic link whose contents are read is determined relative to the directory associated with file descriptor fd instead of the current working directory.

If `readlinkat`() is passed the special value `AT_FDCWD` (defined in `<fcntl.h>`) in the fd parameter, the current working directory is used and the behavior is identical to a call to `readlink`().

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

# ERRORS

`readlink`() and `readlinkat`() 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 pathname (including the terminating NUL) exceeded `PATH_MAX` bytes.
[`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 or path extends outside the process's allocated address space.

Additionally, `readlinkat`() will fail if:

[`EBADF`]
  The path argument specifies a relative path and the fd argument is neither `AT_FDCWD` nor a valid file descriptor.
[`ENOTDIR`]
  The path argument specifies a relative path and the fd argument is a valid file descriptor but it does not reference a directory.
[`EACCES`]
  The path argument specifies a relative path but search permission is denied for the directory which the fd file descriptor references.

# SEE ALSO

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

# STANDARDS

The `readlink`() and `readlinkat`() functions conform to IEEE Std 1003.1-2008 (“POSIX.1”).

# HISTORY

The `readlink`() system call first appeared in 4.1cBSD. The `readlinkat`() system call has been available since OpenBSD 5.0.

May 31, 2015 | Debian