X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=original%2Fman2%2Freadlink.2;h=a43fe6ea06358acb4d1a1057385e263c8e1c2349;hb=110dba020f489b75aff2497105f7970c05e2b87c;hp=4491d74f5c4665c2a1c63c1d40db3f20ab842398;hpb=bf11c0c4717abfd30785b3991b933f4687bb24fc;p=linuxjm%2FLDP_man-pages.git diff --git a/original/man2/readlink.2 b/original/man2/readlink.2 index 4491d74f..a43fe6ea 100644 --- a/original/man2/readlink.2 +++ b/original/man2/readlink.2 @@ -1,5 +1,6 @@ .\" Copyright (c) 1983, 1991 The Regents of the University of California. .\" And Copyright (C) 2011 Guillem Jover +.\" And Copyright (C) 2006, 2014 Michael Kerrisk .\" All rights reserved. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) @@ -40,14 +41,23 @@ .\" 2011-09-20, Guillem Jover : .\" Added text on dynamically allocating buffer + example program .\" -.TH READLINK 2 2013-07-18 "Linux" "Linux Programmer's Manual" +.TH READLINK 2 2014-05-10 "Linux" "Linux Programmer's Manual" .SH NAME -readlink \- read value of a symbolic link +readlink, readlinkat \- read value of a symbolic link .SH SYNOPSIS +.nf +.B #include +.sp +.BI "ssize_t readlink(const char *" pathname ", char *" buf \ +", size_t " bufsiz ); +.sp +.BR "#include " "/* Definition of AT_* constants */" .B #include .sp -.BI "ssize_t readlink(const char *" path ", char *" buf ", size_t " bufsiz ); +.BI "ssize_t readlinkat(int " dirfd ", const char *" pathname , +.BI " char *" buf ", size_t " bufsiz ); .sp +.fi .in -4n Feature Test Macro Requirements for glibc (see .BR feature_test_macros (7)): @@ -59,11 +69,24 @@ Feature Test Macro Requirements for glibc (see _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE\ >=\ 200112L .RE +.sp +.BR readlinkat (): +.PD 0 +.ad l +.RS 4 +.TP 4 +Since glibc 2.10: +_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L +.TP +Before glibc 2.10: +_ATFILE_SOURCE +.RE .ad b +.PD .SH DESCRIPTION .BR readlink () places the contents of the symbolic link -.I path +.I pathname in the buffer .IR buf , which has size @@ -74,10 +97,61 @@ does not append a null byte to It will truncate the contents (to a length of .I bufsiz characters), in case the buffer is too small to hold all of the contents. -.SH RETURN VALUE -On success, +.SS readlinkat() +The +.BR readlinkat () +system call operates in exactly the same way as +.BR readlink (), +except for the differences described here. + +If the pathname given in +.I pathname +is relative, then it is interpreted relative to the directory +referred to by the file descriptor +.I dirfd +(rather than relative to the current working directory of +the calling process, as is done by .BR readlink () -returns the number of bytes placed in +for a relative pathname). + +If +.I pathname +is relative and +.I dirfd +is the special value +.BR AT_FDCWD , +then +.I pathname +is interpreted relative to the current working +directory of the calling process (like +.BR readlink ()). + +If +.I pathname +is absolute, then +.I dirfd +is ignored. + +Since Linux 2.6.39, +.\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d +.I pathname +can be an empty string, +in which case the call operates on the file referred to by +.IR dirfd +(which may have been obtained using the +.BR open (2) +.B O_PATH +flag). +In this case, +.I dirfd +can refer to any type of file, not just a directory. +.PP +See +.BR openat (2) +for an explanation of the need for +.BR readlinkat (). +.SH RETURN VALUE +On success, these calls return the number of bytes placed in .IR buf . On error, \-1 is returned and .I errno @@ -122,11 +196,32 @@ Insufficient kernel memory was available. .TP .B ENOTDIR A component of the path prefix is not a directory. +.PP +The following additional errors can occur for +.BR readlinkat (): +.TP +.B EBADF +.I dirfd +is not a valid file descriptor. +.TP +.B ENOTDIR +.I pathname +is relative and +.I dirfd +is a file descriptor referring to a file other than a directory. +.SH VERSIONS +.BR readlinkat () +was added to Linux in kernel 2.6.16; +library support was added to glibc in version 2.4. .SH CONFORMING TO +.BR readlink (): 4.4BSD .RB ( readlink () first appeared in 4.2BSD), -POSIX.1-2001. +POSIX.1-2001, POSIX.1-2008. + +.BR readlinkat (): +POSIX.1-2008. .SH NOTES In versions of glibc up to and including glibc 2.4, the return type of .BR readlink () @@ -145,10 +240,14 @@ value returned by a call to on the link. However, the number of bytes written by .BR readlink () +and +.BR readlinkat () should be checked to make sure that the size of the symbolic link did not increase between the calls. Dynamically allocating the buffer for .BR readlink () +and +.BR readlinkat () also addresses a common portability problem when using .I PATH_MAX for the buffer size, @@ -194,7 +293,7 @@ main(int argc, char *argv[]) r = readlink(argv[1], linkname, sb.st_size + 1); if (r == \-1) { - perror("lstat"); + perror("readlink"); exit(EXIT_FAILURE); } @@ -214,8 +313,16 @@ main(int argc, char *argv[]) .SH SEE ALSO .BR readlink (1), .BR lstat (2), -.BR readlinkat (2), .BR stat (2), .BR symlink (2), .BR path_resolution (7), .BR symlink (7) +.SH COLOPHON +This page is part of release 3.68 of the Linux +.I man-pages +project. +A description of the project, +information about reporting bugs, +and the latest version of this page, +can be found at +\%http://www.kernel.org/doc/man\-pages/.