]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - lib/libc/sys/link.2
Document {O,AT}_RESOLVE_BENEATH and new O_BENEATH behavior for relative paths.
[FreeBSD/FreeBSD.git] / lib / libc / sys / link.2
1 .\" Copyright (c) 1980, 1991, 1993
2 .\"     The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. Neither the name of the University nor the names of its contributors
13 .\"    may be used to endorse or promote products derived from this software
14 .\"    without specific prior written permission.
15 .\"
16 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
17 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
20 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 .\" SUCH DAMAGE.
27 .\"
28 .\"     @(#)link.2      8.3 (Berkeley) 1/12/94
29 .\" $FreeBSD$
30 .\"
31 .Dd September 23, 2020
32 .Dt LINK 2
33 .Os
34 .Sh NAME
35 .Nm link ,
36 .Nm linkat
37 .Nd make a hard file link
38 .Sh LIBRARY
39 .Lb libc
40 .Sh SYNOPSIS
41 .In unistd.h
42 .Ft int
43 .Fn link "const char *name1" "const char *name2"
44 .Ft int
45 .Fo linkat
46 .Fa "int fd1" "const char *name1" "int fd2" "const char *name2" "int flag"
47 .Fc
48 .Sh DESCRIPTION
49 The
50 .Fn link
51 system call
52 atomically creates the specified directory entry (hard link)
53 .Fa name2
54 with the attributes of the underlying object pointed at by
55 .Fa name1 .
56 If the link is successful: the link count of the underlying object
57 is incremented;
58 .Fa name1
59 and
60 .Fa name2
61 share equal access and rights
62 to the
63 underlying object.
64 .Pp
65 If
66 .Fa name1
67 is removed, the file
68 .Fa name2
69 is not deleted and the link count of the
70 underlying object is
71 decremented.
72 .Pp
73 The object pointed at by the
74 .Fa name1
75 argument
76 must exist for the hard link to
77 succeed and
78 both
79 .Fa name1
80 and
81 .Fa name2
82 must be in the same file system.
83 The
84 .Fa name1
85 argument
86 may not be a directory.
87 .Pp
88 The
89 .Fn linkat
90 system call is equivalent to
91 .Fa link
92 except in the case where either
93 .Fa name1
94 or
95 .Fa name2
96 or both are relative paths.
97 In this case a relative path
98 .Fa name1
99 is interpreted relative to
100 the directory associated with the file descriptor
101 .Fa fd1
102 instead of the current working directory and similarly for
103 .Fa name2
104 and the file descriptor
105 .Fa fd2 .
106 .Pp
107 Values for
108 .Fa flag
109 are constructed by a bitwise-inclusive OR of flags from the following
110 list, defined in
111 .In fcntl.h :
112 .Bl -tag -width indent
113 .It Dv AT_SYMLINK_FOLLOW
114 If
115 .Fa name1
116 names a symbolic link, a new link for the target of the symbolic link is
117 created.
118 .It Dv AT_BENEATH
119 Only allow to link to a file which is beneath of the topping directory.
120 See the description of the
121 .Dv O_BENEATH
122 flag in the
123 .Xr open 2
124 manual page.
125 .It Dv AT_RESOLVE_BENEATH
126 Only walks paths below the topping directory.
127 See the description of the
128 .Dv O_RESOLVE_BENEATH
129 flag in the
130 .Xr open 2
131 manual page.
132 .El
133 .Pp
134 If
135 .Fn linkat
136 is passed the special value
137 .Dv AT_FDCWD
138 in the
139 .Fa fd1
140 or
141 .Fa fd2
142 parameter, the current working directory is used for the respective
143 .Fa name
144 argument.
145 If both
146 .Fa fd1
147 and
148 .Fa fd2
149 have value
150 .Dv AT_FDCWD ,
151 the behavior is identical to a call to
152 .Fn link .
153 Unless
154 .Fa flag
155 contains the
156 .Dv AT_SYMLINK_FOLLOW
157 flag, if
158 .Fa name1
159 names a symbolic link, a new link is created for the symbolic link
160 .Fa name1
161 and not its target.
162 .Sh RETURN VALUES
163 .Rv -std link
164 .Sh ERRORS
165 The
166 .Fn link
167 system call
168 will fail and no link will be created if:
169 .Bl -tag -width Er
170 .It Bq Er ENOTDIR
171 A component of either path prefix is not a directory.
172 .It Bq Er ENAMETOOLONG
173 A component of either pathname exceeded 255 characters,
174 or entire length of either path name exceeded 1023 characters.
175 .It Bq Er ENOENT
176 A component of either path prefix does not exist.
177 .It Bq Er EOPNOTSUPP
178 The file system containing the file named by
179 .Fa name1
180 does not support links.
181 .It Bq Er EMLINK
182 The link count of the file named by
183 .Fa name1
184 would exceed 32767.
185 .It Bq Er EACCES
186 A component of either path prefix denies search permission.
187 .It Bq Er EACCES
188 The requested link requires writing in a directory with a mode
189 that denies write permission.
190 .It Bq Er ELOOP
191 Too many symbolic links were encountered in translating one of the pathnames.
192 .It Bq Er ENOENT
193 The file named by
194 .Fa name1
195 does not exist.
196 .It Bq Er EEXIST
197 The link named by
198 .Fa name2
199 does exist.
200 .It Bq Er EPERM
201 The file named by
202 .Fa name1
203 is a directory.
204 .It Bq Er EPERM
205 The file named by
206 .Fa name1
207 has its immutable or append-only flag set, see the
208 .Xr chflags 2
209 manual page for more information.
210 .It Bq Er EPERM
211 The parent directory of the file named by
212 .Fa name2
213 has its immutable flag set.
214 .It Bq Er EXDEV
215 The link named by
216 .Fa name2
217 and the file named by
218 .Fa name1
219 are on different file systems.
220 .It Bq Er ENOSPC
221 The directory in which the entry for the new link is being placed
222 cannot be extended because there is no space left on the file
223 system containing the directory.
224 .It Bq Er EDQUOT
225 The directory in which the entry for the new link
226 is being placed cannot be extended because the
227 user's quota of disk blocks on the file system
228 containing the directory has been exhausted.
229 .It Bq Er EIO
230 An I/O error occurred while reading from or writing to
231 the file system to make the directory entry.
232 .It Bq Er EINTEGRITY
233 Corrupted data was detected while reading from the file system.
234 .It Bq Er EROFS
235 The requested link requires writing in a directory on a read-only file
236 system.
237 .It Bq Er EFAULT
238 One of the pathnames specified
239 is outside the process's allocated address space.
240 .El
241 .Pp
242 In addition to the errors returned by the
243 .Fn link ,
244 the
245 .Fn linkat
246 system call may fail if:
247 .Bl -tag -width Er
248 .It Bq Er EBADF
249 The
250 .Fa name1
251 or
252 .Fa name2
253 argument does not specify an absolute path and the
254 .Fa fd1
255 or
256 .Fa fd2
257 argument, respectively, is neither
258 .Dv AT_FDCWD
259 nor a valid file descriptor open for searching.
260 .It Bq Er EINVAL
261 The value of the
262 .Fa flag
263 argument is not valid.
264 .It Bq Er ENOTDIR
265 The
266 .Fa name1
267 or
268 .Fa name2
269 argument is not an absolute path and
270 .Fa fd1
271 or
272 .Fa fd2 ,
273 respectively, is neither
274 .Dv AT_FDCWD
275 nor a file descriptor associated with a directory.
276 .It Bq Er ENOTCAPABLE
277 .Fa name1
278 is not strictly relative to the starting directory.
279 For example,
280 .Fa name1
281 is absolute or includes a ".." component that escapes
282 the directory hierarchy specified by
283 .Fa fd ,
284 and the process is in capability mode.
285 .It Bq Er ENOTCAPABLE
286 The
287 .Dv AT_BENEATH
288 flag was provided to
289 .Fa linkat
290 and the absolute path
291 .Fa name1
292 does not have its tail fully contained under the topping directory,
293 or the relative path
294 .Fa name1
295 escapes it.
296 .El
297 .Sh SEE ALSO
298 .Xr chflags 2 ,
299 .Xr readlink 2 ,
300 .Xr symlink 2 ,
301 .Xr unlink 2
302 .Sh STANDARDS
303 The
304 .Fn link
305 system call is expected to conform to
306 .St -p1003.1-90 .
307 The
308 .Fn linkat
309 system call follows The Open Group Extended API Set 2 specification.
310 .Sh HISTORY
311 The
312 .Fn link
313 function appeared in
314 .At v1 .
315 The
316 .Fn linkat
317 system call appeared in
318 .Fx 8.0 .
319 .Pp
320 The
321 .Fn link
322 system call traditionally allows the super-user to link directories which
323 corrupts the file system coherency.
324 This implementation no longer permits it.