xref: /illumos-gate/usr/src/man/man2/readlink.2 (revision 533affcbc7fc4d0c8132976ea454aaa715fe2307)

Sun Microsystems, Inc. gratefully acknowledges The Open Group for
permission to reproduce portions of its copyrighted documentation.
Original documentation from The Open Group can be obtained online at
http://www.opengroup.org/bookstore/.

The Institute of Electrical and Electronics Engineers and The Open
Group, have given us permission to reprint portions of their
documentation.

In the following statement, the phrase ``this text'' refers to portions
of the system documentation.

Portions of this text are reprinted and reproduced in electronic form
in the SunOS Reference Manual, from IEEE Std 1003.1, 2004 Edition,
Standard for Information Technology -- Portable Operating System
Interface (POSIX), The Open Group Base Specifications Issue 6,
Copyright (C) 2001-2004 by the Institute of Electrical and Electronics
Engineers, Inc and The Open Group. In the event of any discrepancy
between these versions and the original IEEE and The Open Group
Standard, the original IEEE and The Open Group Standard is the referee
document. The original Standard can be obtained online at
http://www.opengroup.org/unix/online.html.

This notice shall appear on any product containing this material.

The contents of this file are subject to the terms of the
Common Development and Distribution License (the "License").
You may not use this file except in compliance with the License.

You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
or http://www.opensolaris.org/os/licensing.
See the License for the specific language governing permissions
and limitations under the License.

When distributing Covered Code, include this CDDL HEADER in each
file and include the License file at usr/src/OPENSOLARIS.LICENSE.
If applicable, add the following below this CDDL HEADER, with the
fields enclosed by brackets "[]" replaced with your own identifying
information: Portions Copyright [yyyy] [name of copyright owner]


Copyright 1989 AT&T
Copyright (c) 2002, Sun Microsystems, Inc. All Rights Reserved.
Portions Copyright (c) 1992, X/Open Company Limited. All Rights Reserved.
Copyright (c) 2014, Joyent, Inc.

READLINK 2 "Dec 23, 2014"
NAME
readlink - read the contents of a symbolic link
SYNOPSIS

#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);
DESCRIPTION

The readlink() and readlinkat() functions place the contents of the symbolic link referred to by path in the buffer buf which has size bufsiz. If the number of bytes in the symbolic link is less than bufsiz, the contents of the remainder of buf are left unchanged. If the buf argument is not large enough to contain the link content, the first bufsize bytes are placed in buf.

The realinkat() function behaves similarly to readlink(); however, when path is a relative path, it is resolved relative to the directory referred to by fd. To use the current working directory, fd should be the special value AT_FDCWD.

RETURN VALUES

Upon successful completion, readlink() and readlinkat() return the count of bytes placed in the buffer. Otherwise, they returns -1, leave the buffer unchanged, and set errno to indicate the error.

ERRORS

The readlink() and readlinkat() functions will fail if: EACCES

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

EFAULT

path or buf points to an illegal address.

EINVAL

The path argument names a file that is not a symbolic link.

EIO

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

ENOENT

A component of path does not name an existing file or path is an empty string.

ELOOP

A loop exists in symbolic links encountered during resolution of the path argument.

ENAMETOOLONG

The length of path exceeds {PATH_MAX}, or a pathname component is longer than {NAME_MAX} while _POSIX_NO_TRUNC is in effect.

ENOTDIR

A component of the path prefix is not a directory. For readlinkat(), if path is a relative path and fd refers to a valid file descriptor which is not a directory.

ENOSYS

The file system does not support symbolic links.

The readlinkat() function will fail if: EBADF

The path argument is a relative path and fd is not a valid, open file descriptor or the special value AT_FDCWD.

The readlink() function may fail if: EACCES

Read permission is denied for the directory.

ELOOP

More than {SYMLOOP_MAX} symbolic links were encountered in resolving path.

ENAMETOOLONG

As a result of encountering a symbolic link in resolution of the path argument, the length of the substituted pathname string exceeded {PATH_MAX}.

USAGE

Portable applications should not assume that the returned contents of the symbolic link are null-terminated.

ATTRIBUTES

See attributes(7) for descriptions of the following attributes:

ATTRIBUTE TYPE ATTRIBUTE VALUE
Interface Stability Standard
MT-Level Async-Signal-Safe
SEE ALSO

stat (2), symlink (2), attributes (7), standards (7)