xref: /freebsd-13.1/lib/libc/sys/link.2 (revision ea22b5bd)
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 November 11, 2018
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
49The
50.Fn link
51system call
52atomically creates the specified directory entry (hard link)
53.Fa name2
54with the attributes of the underlying object pointed at by
55.Fa name1 .
56If the link is successful: the link count of the underlying object
57is incremented;
58.Fa name1
59and
60.Fa name2
61share equal access and rights
62to the
63underlying object.
64.Pp
65If
66.Fa name1
67is removed, the file
68.Fa name2
69is not deleted and the link count of the
70underlying object is
71decremented.
72.Pp
73The object pointed at by the
74.Fa name1
75argument
76must exist for the hard link to
77succeed and
78both
79.Fa name1
80and
81.Fa name2
82must be in the same file system.
83The
84.Fa name1
85argument
86may not be a directory.
87.Pp
88The
89.Fn linkat
90system call is equivalent to
91.Fa link
92except in the case where either
93.Fa name1
94or
95.Fa name2
96or both are relative paths.
97In this case a relative path
98.Fa name1
99is interpreted relative to
100the directory associated with the file descriptor
101.Fa fd1
102instead of the current working directory and similarly for
103.Fa name2
104and the file descriptor
105.Fa fd2 .
106.Pp
107Values for
108.Fa flag
109are constructed by a bitwise-inclusive OR of flags from the following
110list, defined in
111.In fcntl.h :
112.Bl -tag -width indent
113.It Dv AT_SYMLINK_FOLLOW
114If
115.Fa name1
116names a symbolic link, a new link for the target of the symbolic link is
117created.
118.It Dv AT_BENEATH
119Only allow to link to a file which is beneath of the topping directory.
120See the description of the
121.Dv O_BENEATH
122flag in the
123.Xr open 2
124manual page.
125.El
126.Pp
127If
128.Fn linkat
129is passed the special value
130.Dv AT_FDCWD
131in the
132.Fa fd1
133or
134.Fa fd2
135parameter, the current working directory is used for the respective
136.Fa name
137argument.
138If both
139.Fa fd1
140and
141.Fa fd2
142have value
143.Dv AT_FDCWD ,
144the behavior is identical to a call to
145.Fn link .
146Unless
147.Fa flag
148contains the
149.Dv AT_SYMLINK_FOLLOW
150flag, if
151.Fa name1
152names a symbolic link, a new link is created for the symbolic link
153.Fa name1
154and not its target.
155.Sh RETURN VALUES
156.Rv -std link
157.Sh ERRORS
158The
159.Fn link
160system call
161will fail and no link will be created if:
162.Bl -tag -width Er
163.It Bq Er ENOTDIR
164A component of either path prefix is not a directory.
165.It Bq Er ENAMETOOLONG
166A component of either pathname exceeded 255 characters,
167or entire length of either path name exceeded 1023 characters.
168.It Bq Er ENOENT
169A component of either path prefix does not exist.
170.It Bq Er EOPNOTSUPP
171The file system containing the file named by
172.Fa name1
173does not support links.
174.It Bq Er EMLINK
175The link count of the file named by
176.Fa name1
177would exceed 32767.
178.It Bq Er EACCES
179A component of either path prefix denies search permission.
180.It Bq Er EACCES
181The requested link requires writing in a directory with a mode
182that denies write permission.
183.It Bq Er ELOOP
184Too many symbolic links were encountered in translating one of the pathnames.
185.It Bq Er ENOENT
186The file named by
187.Fa name1
188does not exist.
189.It Bq Er EEXIST
190The link named by
191.Fa name2
192does exist.
193.It Bq Er EPERM
194The file named by
195.Fa name1
196is a directory.
197.It Bq Er EPERM
198The file named by
199.Fa name1
200has its immutable or append-only flag set, see the
201.Xr chflags 2
202manual page for more information.
203.It Bq Er EPERM
204The parent directory of the file named by
205.Fa name2
206has its immutable flag set.
207.It Bq Er EXDEV
208The link named by
209.Fa name2
210and the file named by
211.Fa name1
212are on different file systems.
213.It Bq Er ENOSPC
214The directory in which the entry for the new link is being placed
215cannot be extended because there is no space left on the file
216system containing the directory.
217.It Bq Er EDQUOT
218The directory in which the entry for the new link
219is being placed cannot be extended because the
220user's quota of disk blocks on the file system
221containing the directory has been exhausted.
222.It Bq Er EIO
223An I/O error occurred while reading from or writing to
224the file system to make the directory entry.
225.It Bq Er EROFS
226The requested link requires writing in a directory on a read-only file
227system.
228.It Bq Er EFAULT
229One of the pathnames specified
230is outside the process's allocated address space.
231.El
232.Pp
233In addition to the errors returned by the
234.Fn link ,
235the
236.Fn linkat
237system call may fail if:
238.Bl -tag -width Er
239.It Bq Er EBADF
240The
241.Fa name1
242or
243.Fa name2
244argument does not specify an absolute path and the
245.Fa fd1
246or
247.Fa fd2
248argument, respectively, is neither
249.Dv AT_FDCWD
250nor a valid file descriptor open for searching.
251.It Bq Er EINVAL
252The value of the
253.Fa flag
254argument is not valid.
255.It Bq Er ENOTDIR
256The
257.Fa name1
258or
259.Fa name2
260argument is not an absolute path and
261.Fa fd1
262or
263.Fa fd2 ,
264respectively, is neither
265.Dv AT_FDCWD
266nor a file descriptor associated with a directory.
267.It Bq Er ENOTCAPABLE
268.Fa name1
269is not strictly relative to the starting directory.
270For example,
271.Fa name1
272is absolute or includes a ".." component that escapes
273the directory hierarchy specified by
274.Fa fd ,
275and the process is in capability mode.
276.It Bq Er ENOTCAPABLE
277The
278.Dv AT_BENEATH
279flag was provided to
280.Fa linkat
281and the absolute path
282.Fa name1
283does not have its tail fully contained under the topping directory,
284or the relative path
285.Fa name1
286escapes it.
287.El
288.Sh SEE ALSO
289.Xr chflags 2 ,
290.Xr readlink 2 ,
291.Xr symlink 2 ,
292.Xr unlink 2
293.Sh STANDARDS
294The
295.Fn link
296system call is expected to conform to
297.St -p1003.1-90 .
298The
299.Fn linkat
300system call follows The Open Group Extended API Set 2 specification.
301.Sh HISTORY
302The
303.Fn link
304function appeared in
305.At v1 .
306The
307.Fn linkat
308system call appeared in
309.Fx 8.0 .
310.Pp
311The
312.Fn link
313system call traditionally allows the super-user to link directories which
314corrupts the file system coherency.
315This implementation no longer permits it.
316