OSDN Git Service

Update perkamon to LDP v3.79
[linuxjm/LDP_man-pages.git] / original / man2 / readlink.2
1 .\" Copyright (c) 1983, 1991 The Regents of the University of California.
2 .\" And Copyright (C) 2011 Guillem Jover <guillem@hadrons.org>
3 .\" And Copyright (C) 2006, 2014 Michael Kerrisk
4 .\" All rights reserved.
5 .\"
6 .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB)
7 .\" Redistribution and use in source and binary forms, with or without
8 .\" modification, are permitted provided that the following conditions
9 .\" are met:
10 .\" 1. Redistributions of source code must retain the above copyright
11 .\"    notice, this list of conditions and the following disclaimer.
12 .\" 2. Redistributions in binary form must reproduce the above copyright
13 .\"    notice, this list of conditions and the following disclaimer in the
14 .\"    documentation and/or other materials provided with the distribution.
15 .\" 3. All advertising materials mentioning features or use of this software
16 .\"    must display the following acknowledgement:
17 .\"     This product includes software developed by the University of
18 .\"     California, Berkeley and its contributors.
19 .\" 4. Neither the name of the University nor the names of its contributors
20 .\"    may be used to endorse or promote products derived from this software
21 .\"    without specific prior written permission.
22 .\"
23 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
24 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
25 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
26 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
27 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
28 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
29 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33 .\" SUCH DAMAGE.
34 .\" %%%LICENSE_END
35 .\"
36 .\"     @(#)readlink.2  6.8 (Berkeley) 3/10/91
37 .\"
38 .\" Modified Sat Jul 24 00:10:21 1993 by Rik Faith (faith@cs.unc.edu)
39 .\" Modified Tue Jul  9 23:55:17 1996 by aeb
40 .\" Modified Fri Jan 24 00:26:00 1997 by aeb
41 .\" 2011-09-20, Guillem Jover <guillem@hadrons.org>:
42 .\"     Added text on dynamically allocating buffer + example program
43 .\"
44 .TH READLINK 2 2014-10-15 "Linux" "Linux Programmer's Manual"
45 .SH NAME
46 readlink, readlinkat \- read value of a symbolic link
47 .SH SYNOPSIS
48 .nf
49 .B #include <unistd.h>
50 .sp
51 .BI "ssize_t readlink(const char *" pathname ", char *" buf \
52 ", size_t " bufsiz );
53 .sp
54 .BR "#include <fcntl.h>           " "/* Definition of AT_* constants */"
55 .B #include <unistd.h>
56 .sp
57 .BI "ssize_t readlinkat(int " dirfd ", const char *" pathname ,
58 .BI "                   char *" buf ", size_t " bufsiz );
59 .sp
60 .fi
61 .in -4n
62 Feature Test Macro Requirements for glibc (see
63 .BR feature_test_macros (7)):
64 .in
65 .sp
66 .ad l
67 .BR readlink ():
68 .RS 4
69 _BSD_SOURCE || _XOPEN_SOURCE\ >=\ 500 ||
70 _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED || _POSIX_C_SOURCE\ >=\ 200112L
71 .RE
72 .sp
73 .BR readlinkat ():
74 .PD 0
75 .ad l
76 .RS 4
77 .TP 4
78 Since glibc 2.10:
79 _XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
80 .TP
81 Before glibc 2.10:
82 _ATFILE_SOURCE
83 .RE
84 .ad b
85 .PD
86 .SH DESCRIPTION
87 .BR readlink ()
88 places the contents of the symbolic link
89 .I pathname
90 in the buffer
91 .IR buf ,
92 which has size
93 .IR bufsiz .
94 .BR readlink ()
95 does not append a null byte to
96 .IR buf .
97 It will truncate the contents (to a length of
98 .I bufsiz
99 characters), in case the buffer is too small to hold all of the contents.
100 .SS readlinkat()
101 The
102 .BR readlinkat ()
103 system call operates in exactly the same way as
104 .BR readlink (),
105 except for the differences described here.
106
107 If the pathname given in
108 .I pathname
109 is relative, then it is interpreted relative to the directory
110 referred to by the file descriptor
111 .I dirfd
112 (rather than relative to the current working directory of
113 the calling process, as is done by
114 .BR readlink ()
115 for a relative pathname).
116
117 If
118 .I pathname
119 is relative and
120 .I dirfd
121 is the special value
122 .BR AT_FDCWD ,
123 then
124 .I pathname
125 is interpreted relative to the current working
126 directory of the calling process (like
127 .BR readlink ()).
128
129 If
130 .I pathname
131 is absolute, then
132 .I dirfd
133 is ignored.
134
135 Since Linux 2.6.39,
136 .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
137 .I pathname
138 can be an empty string,
139 in which case the call operates on the symbolic link referred to by
140 .IR dirfd
141 (which should have been obtained using
142 .BR open (2)
143 with the
144 .B O_PATH
145 and
146 .B O_NOFOLLOW
147 flags).
148 .PP
149 See
150 .BR openat (2)
151 for an explanation of the need for
152 .BR readlinkat ().
153 .SH RETURN VALUE
154 On success, these calls return the number of bytes placed in
155 .IR buf .
156 On error, \-1 is returned and
157 .I errno
158 is set to indicate the error.
159 .SH ERRORS
160 .TP
161 .B EACCES
162 Search permission is denied for a component of the path prefix.
163 (See also
164 .BR path_resolution (7).)
165 .TP
166 .B EFAULT
167 .I buf
168 extends outside the process's allocated address space.
169 .TP
170 .B EINVAL
171 .I bufsiz
172 is not positive.
173 .\" At the glibc level, bufsiz is unsigned, so this error can only occur
174 .\" if bufsiz==0.  However, the in the kernel syscall, bufsiz is signed,
175 .\" and this error can also occur if bufsiz < 0.
176 .\" See: http://thread.gmane.org/gmane.linux.man/380
177 .\" Subject: [patch 0/3] [RFC] kernel/glibc mismatch of "readlink" syscall?
178 .TP
179 .B EINVAL
180 The named file is not a symbolic link.
181 .TP
182 .B EIO
183 An I/O error occurred while reading from the filesystem.
184 .TP
185 .B ELOOP
186 Too many symbolic links were encountered in translating the pathname.
187 .TP
188 .B ENAMETOOLONG
189 A pathname, or a component of a pathname, was too long.
190 .TP
191 .B ENOENT
192 The named file does not exist.
193 .TP
194 .B ENOMEM
195 Insufficient kernel memory was available.
196 .TP
197 .B ENOTDIR
198 A component of the path prefix is not a directory.
199 .PP
200 The following additional errors can occur for
201 .BR readlinkat ():
202 .TP
203 .B EBADF
204 .I dirfd
205 is not a valid file descriptor.
206 .TP
207 .B ENOTDIR
208 .I pathname
209 is relative and
210 .I dirfd
211 is a file descriptor referring to a file other than a directory.
212 .SH VERSIONS
213 .BR readlinkat ()
214 was added to Linux in kernel 2.6.16;
215 library support was added to glibc in version 2.4.
216 .SH CONFORMING TO
217 .BR readlink ():
218 4.4BSD
219 .RB ( readlink ()
220 first appeared in 4.2BSD),
221 POSIX.1-2001, POSIX.1-2008.
222
223 .BR readlinkat ():
224 POSIX.1-2008.
225 .SH NOTES
226 In versions of glibc up to and including glibc 2.4, the return type of
227 .BR readlink ()
228 was declared as
229 .IR int .
230 Nowadays, the return type is declared as
231 .IR ssize_t ,
232 as (newly) required in POSIX.1-2001.
233
234 Using a statically sized buffer might not provide enough room for the
235 symbolic link contents.
236 The required size for the buffer can be obtained from the
237 .I stat.st_size
238 value returned by a call to
239 .BR lstat (2)
240 on the link.
241 However, the number of bytes written by
242 .BR readlink ()
243 and
244 .BR readlinkat ()
245 should be checked to make sure that the size of the
246 symbolic link did not increase between the calls.
247 Dynamically allocating the buffer for
248 .BR readlink ()
249 and
250 .BR readlinkat ()
251 also addresses a common portability problem when using
252 .I PATH_MAX
253 for the buffer size,
254 as this constant is not guaranteed to be defined per POSIX
255 if the system does not have such limit.
256 .SS Glibc notes
257 On older kernels where
258 .BR readlinkat ()
259 is unavailable, the glibc wrapper function falls back to the use of
260 .BR readlink ().
261 When
262 .I pathname
263 is a relative pathname,
264 glibc constructs a pathname based on the symbolic link in
265 .IR /proc/self/fd
266 that corresponds to the
267 .IR dirfd
268 argument.
269 .SH EXAMPLE
270 The following program allocates the buffer needed by
271 .BR readlink ()
272 dynamically from the information provided by
273 .BR lstat (),
274 making sure there's no race condition between the calls.
275 .nf
276
277 #include <sys/types.h>
278 #include <sys/stat.h>
279 #include <stdio.h>
280 #include <stdlib.h>
281 #include <unistd.h>
282
283 int
284 main(int argc, char *argv[])
285 {
286     struct stat sb;
287     char *linkname;
288     ssize_t r;
289
290     if (argc != 2) {
291         fprintf(stderr, "Usage: %s <pathname>\\n", argv[0]);
292         exit(EXIT_FAILURE);
293     }
294
295     if (lstat(argv[1], &sb) == \-1) {
296         perror("lstat");
297         exit(EXIT_FAILURE);
298     }
299
300     linkname = malloc(sb.st_size + 1);
301     if (linkname == NULL) {
302         fprintf(stderr, "insufficient memory\\n");
303         exit(EXIT_FAILURE);
304     }
305
306     r = readlink(argv[1], linkname, sb.st_size + 1);
307
308     if (r == \-1) {
309         perror("readlink");
310         exit(EXIT_FAILURE);
311     }
312
313     if (r > sb.st_size) {
314         fprintf(stderr, "symlink increased in size "
315                         "between lstat() and readlink()\\n");
316         exit(EXIT_FAILURE);
317     }
318
319     linkname[r] = \(aq\\0\(aq;
320
321     printf("\(aq%s\(aq points to \(aq%s\(aq\\n", argv[1], linkname);
322
323     free(linkname);
324
325     exit(EXIT_SUCCESS);
326 }
327 .fi
328 .SH SEE ALSO
329 .BR readlink (1),
330 .BR lstat (2),
331 .BR stat (2),
332 .BR symlink (2),
333 .BR realpath (3),
334 .BR path_resolution (7),
335 .BR symlink (7)
336 .SH COLOPHON
337 This page is part of release 3.78 of the Linux
338 .I man-pages
339 project.
340 A description of the project,
341 information about reporting bugs,
342 and the latest version of this page,
343 can be found at
344 \%http://www.kernel.org/doc/man\-pages/.