Movatterモバイル変換


[0]ホーム

URL:


man7.org > Linux >man-pages

Linux/UNIX system programming training


readlink(3p) — Linux manual page

PROLOG |NAME |SYNOPSIS |DESCRIPTION |RETURN VALUE |ERRORS |EXAMPLES |APPLICATION USAGE |RATIONALE |FUTURE DIRECTIONS |SEE ALSO |COPYRIGHT

READLINK(3P)            POSIX Programmer's ManualREADLINK(3P)

PROLOG        top

       This manual page is part of the POSIX Programmer's Manual.  The       Linux implementation of this interface may differ (consult the       corresponding Linux manual page for details of Linux behavior), or       the interface may not be implemented on Linux.

NAME        top

       readlink, readlinkat — read the contents of a symbolic link

SYNOPSIS        top

       #include <unistd.h>       ssize_t readlink(const char *restrictpath, char *restrictbuf,           size_tbufsize);       #include <fcntl.h>       ssize_t readlinkat(intfd, const char *restrictpath,           char *restrictbuf, size_tbufsize);

DESCRIPTION        top

       Thereadlink() function shall place the contents of the symbolic       link referred to bypath in the bufferbuf which has sizebufsize.       If the number of bytes in the symbolic link is less thanbufsize,       the contents of the remainder ofbuf are unspecified. If thebuf       argument is not large enough to contain the link content, the       firstbufsize bytes shall be placed inbuf.       If the value ofbufsize is greater than {SSIZE_MAX}, the result is       implementation-defined.       Upon successful completion,readlink() shall mark for update the       last data access timestamp of the symbolic link.       Thereadlinkat() function shall be equivalent to thereadlink()       function except in the case wherepath specifies a relative path.       In this case the symbolic link whose content is read is relative       to the directory associated with the file descriptorfd instead of       the current working directory. If the access mode of the open file       description associated with the file descriptor is not O_SEARCH,       the function shall check whether directory searches are permitted       using the current permissions of the directory underlying the file       descriptor. If the access mode is O_SEARCH, the function shall not       perform the check.       Ifreadlinkat() is passed the special value AT_FDCWD in thefd       parameter, the current working directory shall be used and the       behavior shall be identical to a call toreadlink().

RETURN VALUE        top

       Upon successful completion, these functions shall return the count       of bytes placed in the buffer. Otherwise, these functions shall       return a value of -1, leave the buffer unchanged, and seterrno to       indicate the error.

ERRORS        top

       These functions shall fail if:EACCESSearch permission is denied for a component of the path              prefix ofpath.EINVALThepath argument names a file that is not a symbolic link.EIOAn I/O error occurred while reading from the file system.ELOOPA loop exists in symbolic links encountered during              resolution of thepath argument.ENAMETOOLONG              The length of a component of a pathname is longer than              {NAME_MAX}.ENOENTA component ofpath does not name an existing file orpath              is an empty string.ENOTDIR              A component of the path prefix names an existing file that              is neither a directory nor a symbolic link to a directory,              or thepath argument contains at least one non-<slash>              character and ends with one or more trailing <slash>              characters and the last pathname component names an              existing file that is neither a directory nor a symbolic              link to a directory.       Thereadlinkat() function shall fail if:EACCESThe access mode of the open file description associated              withfd is not O_SEARCH and the permissions of the              directory underlyingfd do not permit directory searches.EBADFThepath argument does not specify an absolute path and thefd argument is neither AT_FDCWD nor a valid file descriptor              open for reading or searching.ENOTDIR              Thepath argument is not an absolute path andfd is a file              descriptor associated with a non-directory file.       These functions may fail if:ELOOPMore than {SYMLOOP_MAX} symbolic links were encountered              during resolution of thepath argument.ENAMETOOLONG              The length of a pathname exceeds {PATH_MAX}, or pathname              resolution of a symbolic link produced an intermediate              result with a length that exceeds {PATH_MAX}.The following sections are informative.

EXAMPLES        top

Reading the Name of a Symbolic Link       The following example shows how to read the name of a symbolic       link named/modules/pass1.           #include <unistd.h>           char buf[1024];           ssize_t len;           ...           if ((len = readlink("/modules/pass1", buf, sizeof(buf)-1)) != -1)               buf[len] = '\0';

APPLICATION USAGE        top

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

RATIONALE        top

       The type associated withbufsiz is asize_tin order to be       consistent with both the ISO C standard and the definition ofread().  The behavior specified forreadlink() whenbufsiz is zero       represents historical practice. For this case, the standard       developers considered a change wherebyreadlink() would return the       number of non-null bytes contained in the symbolic link with the       bufferbuf remaining unchanged; however, since thestatstructure       memberst_size value can be used to determine the size of buffer       necessary to contain the contents of the symbolic link as returned       byreadlink(), this proposal was rejected, and the historical       practice retained.       The purpose of thereadlinkat() function is to read the content of       symbolic links in directories other than the current working       directory without exposure to race conditions.  Any part of the       path of a file could be changed in parallel to a call toreadlink(), resulting in unspecified behavior. By opening a file       descriptor for the target directory and using thereadlinkat()       function it can be guaranteed that the symbolic link read is       located relative to the desired directory.

FUTURE DIRECTIONS        top

       None.

SEE ALSO        top

fstatat(3p),symlink(3p)       The Base Definitions volume of POSIX.1‐2017,fcntl.h(0p),unistd.h(0p)

COPYRIGHT        top

       Portions of this text are reprinted and reproduced in electronic       form from IEEE Std 1003.1-2017, Standard for Information       Technology -- Portable Operating System Interface (POSIX), The       Open Group Base Specifications Issue 7, 2018 Edition, Copyright       (C) 2018 by the Institute of Electrical and Electronics Engineers,       Inc and The Open Group.  In the event of any discrepancy between       this version 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 athttp://www.opengroup.org/unix/online.html .       Any typographical or formatting errors that appear in this page       are most likely to have been introduced during the conversion of       the source files to man page format. To report such errors, seehttps://www.kernel.org/doc/man-pages/reporting_bugs.html .IEEE/The Open Group                2017READLINK(3P)

Pages that refer to this page:unistd.h(0p)fstatat(3p)symlink(3p)



HTML rendering created 2025-09-06 byMichael Kerrisk, author ofThe Linux Programming Interface.

For details of in-depthLinux/UNIX system programming training courses that I teach, lookhere.

Hosting byjambit GmbH.

Cover of TLPI


[8]ページ先頭

©2009-2025 Movatter.jp