signal.7: Since Linux 3.8, read(2) on an inotify FD is restartable with SA_RESTART
[man-pages.git] / man2 / readlink.2
blobaa8d33b8fa356d115a65d368c973c7f886c32be2
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 2016-10-08 "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 _XOPEN_SOURCE\ >=\ 500 || _POSIX_C_SOURCE\ >=\ 200112L
70 .\"    || _XOPEN_SOURCE\ &&\ _XOPEN_SOURCE_EXTENDED
71     || /* Glibc versions <= 2.19: */ _BSD_SOURCE
72 .RE
73 .sp
74 .BR readlinkat ():
75 .PD 0
76 .ad l
77 .RS 4
78 .TP 4
79 Since glibc 2.10:
80 _POSIX_C_SOURCE\ >=\ 200809L
81 .TP
82 Before glibc 2.10:
83 _ATFILE_SOURCE
84 .RE
85 .ad b
86 .PD
87 .SH DESCRIPTION
88 .BR readlink ()
89 places the contents of the symbolic link
90 .I pathname
91 in the buffer
92 .IR buf ,
93 which has size
94 .IR bufsiz .
95 .BR readlink ()
96 does not append a null byte to
97 .IR buf .
98 It will (silently) truncate the contents (to a length of
99 .I bufsiz
100 characters), in case the buffer is too small to hold all of the contents.
101 .SS readlinkat()
103 .BR readlinkat ()
104 system call operates in exactly the same way as
105 .BR readlink (),
106 except for the differences described here.
108 If the pathname given in
109 .I pathname
110 is relative, then it is interpreted relative to the directory
111 referred to by the file descriptor
112 .I dirfd
113 (rather than relative to the current working directory of
114 the calling process, as is done by
115 .BR readlink ()
116 for a relative pathname).
119 .I pathname
120 is relative and
121 .I dirfd
122 is the special value
123 .BR AT_FDCWD ,
124 then
125 .I pathname
126 is interpreted relative to the current working
127 directory of the calling process (like
128 .BR readlink ()).
131 .I pathname
132 is absolute, then
133 .I dirfd
134 is ignored.
136 Since Linux 2.6.39,
137 .\" commit 65cfc6722361570bfe255698d9cd4dccaf47570d
138 .I pathname
139 can be an empty string,
140 in which case the call operates on the symbolic link referred to by
141 .IR dirfd
142 (which should have been obtained using
143 .BR open (2)
144 with the
145 .B O_PATH
147 .B O_NOFOLLOW
148 flags).
151 .BR openat (2)
152 for an explanation of the need for
153 .BR readlinkat ().
154 .SH RETURN VALUE
155 On success, these calls return the number of bytes placed in
156 .IR buf .
157 (If the returned value equals
158 .IR bufsiz ,
159 then truncation may have occurred.)
160 On error, \-1 is returned and
161 .I errno
162 is set to indicate the error.
163 .SH ERRORS
165 .B EACCES
166 Search permission is denied for a component of the path prefix.
167 (See also
168 .BR path_resolution (7).)
170 .B EFAULT
171 .I buf
172 extends outside the process's allocated address space.
174 .B EINVAL
175 .I bufsiz
176 is not positive.
177 .\" At the glibc level, bufsiz is unsigned, so this error can only occur
178 .\" if bufsiz==0.  However, the in the kernel syscall, bufsiz is signed,
179 .\" and this error can also occur if bufsiz < 0.
180 .\" See: http://thread.gmane.org/gmane.linux.man/380
181 .\" Subject: [patch 0/3] [RFC] kernel/glibc mismatch of "readlink" syscall?
183 .B EINVAL
184 The named file (i.e., the final filename component of
185 .IR pathname )
186 is not a symbolic link.
188 .B EIO
189 An I/O error occurred while reading from the filesystem.
191 .B ELOOP
192 Too many symbolic links were encountered in translating the pathname.
194 .B ENAMETOOLONG
195 A pathname, or a component of a pathname, was too long.
197 .B ENOENT
198 The named file does not exist.
200 .B ENOMEM
201 Insufficient kernel memory was available.
203 .B ENOTDIR
204 A component of the path prefix is not a directory.
206 The following additional errors can occur for
207 .BR readlinkat ():
209 .B EBADF
210 .I dirfd
211 is not a valid file descriptor.
213 .B ENOTDIR
214 .I pathname
215 is relative and
216 .I dirfd
217 is a file descriptor referring to a file other than a directory.
218 .SH VERSIONS
219 .BR readlinkat ()
220 was added to Linux in kernel 2.6.16;
221 library support was added to glibc in version 2.4.
222 .SH CONFORMING TO
223 .BR readlink ():
224 4.4BSD
225 .RB ( readlink ()
226 first appeared in 4.2BSD),
227 POSIX.1-2001, POSIX.1-2008.
229 .BR readlinkat ():
230 POSIX.1-2008.
231 .SH NOTES
232 In versions of glibc up to and including glibc 2.4, the return type of
233 .BR readlink ()
234 was declared as
235 .IR int .
236 Nowadays, the return type is declared as
237 .IR ssize_t ,
238 as (newly) required in POSIX.1-2001.
240 Using a statically sized buffer might not provide enough room for the
241 symbolic link contents.
242 The required size for the buffer can be obtained from the
243 .I stat.st_size
244 value returned by a call to
245 .BR lstat (2)
246 on the link.
247 However, the number of bytes written by
248 .BR readlink ()
250 .BR readlinkat ()
251 should be checked to make sure that the size of the
252 symbolic link did not increase between the calls.
253 Dynamically allocating the buffer for
254 .BR readlink ()
256 .BR readlinkat ()
257 also addresses a common portability problem when using
258 .I PATH_MAX
259 for the buffer size,
260 as this constant is not guaranteed to be defined per POSIX
261 if the system does not have such limit.
262 .SS Glibc notes
263 On older kernels where
264 .BR readlinkat ()
265 is unavailable, the glibc wrapper function falls back to the use of
266 .BR readlink ().
267 When
268 .I pathname
269 is a relative pathname,
270 glibc constructs a pathname based on the symbolic link in
271 .IR /proc/self/fd
272 that corresponds to the
273 .IR dirfd
274 argument.
275 .SH EXAMPLE
276 The following program allocates the buffer needed by
277 .BR readlink ()
278 dynamically from the information provided by
279 .BR lstat (2),
280 falling back to a buffer of size
281 .BR PATH_MAX
282 in cases where
283 .BR lstat (2)
284 reports a size of zero.
287 #include <sys/types.h>
288 #include <sys/stat.h>
289 #include <limits.h>
290 #include <stdio.h>
291 #include <stdlib.h>
292 #include <unistd.h>
295 main(int argc, char *argv[])
297     struct stat sb;
298     char *linkname;
299     ssize_t r, bufsiz;
301     if (argc != 2) {
302         fprintf(stderr, "Usage: %s <pathname>\\n", argv[0]);
303         exit(EXIT_FAILURE);
304     }
306     if (lstat(argv[1], &sb) == \-1) {
307         perror("lstat");
308         exit(EXIT_FAILURE);
309     }
311     bufsiz = sb.st_size + 1;
313     /* Some magic symlinks under (for example) /proc and /sys
314        report \(aqst_size\(aq as zero. In that case, take PATH_MAX as
315        a "good enough" estimate */
317     if (sb.st_size == 0)
318         bufsiz = PATH_MAX;
320     printf("%zd\\n", bufsiz);
322     linkname = malloc(bufsiz);
323     if (linkname == NULL) {
324         perror("malloc");
325         exit(EXIT_FAILURE);
326     }
328     r = readlink(argv[1], linkname, bufsiz);
329     if (r == \-1) {
330         perror("readlink");
331         exit(EXIT_FAILURE);
332     }
334     linkname[r] = \(aq\\0\(aq;
336     printf("\(aq%s\(aq points to \(aq%s\(aq\\n", argv[1], linkname);
338     if (r == bufsiz)
339         printf("(Returned buffer may have been truncated)\\n");
341     free(linkname);
342     exit(EXIT_SUCCESS);
345 .SH SEE ALSO
346 .BR readlink (1),
347 .BR lstat (2),
348 .BR stat (2),
349 .BR symlink (2),
350 .BR realpath (3),
351 .BR path_resolution (7),
352 .BR symlink (7)