]> git.ipfire.org Git - thirdparty/man-pages.git/blame - man2/rename.2
rename.2: srcfix
[thirdparty/man-pages.git] / man2 / rename.2
CommitLineData
fea681da 1.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
ac56b6a8 2.\" and Copyright (C) 1993 Michael Haardt;
9cab982f
MK
3.\" and Copyright (C) 1993,1995 Ian Jackson
4.\" and Copyright (C) 2006, 2014 Michael Kerrisk
fea681da 5.\"
93015253 6.\" %%%LICENSE_START(VERBATIM)
fea681da
MK
7.\" Permission is granted to make and distribute verbatim copies of this
8.\" manual provided the copyright notice and this permission notice are
9.\" preserved on all copies.
10.\"
11.\" Permission is granted to copy and distribute modified versions of this
12.\" manual under the conditions for verbatim copying, provided that the
13.\" entire resulting derived work is distributed under the terms of a
14.\" permission notice identical to this one.
c13182ef 15.\"
fea681da
MK
16.\" Since the Linux kernel and libraries are constantly changing, this
17.\" manual page may be incorrect or out-of-date. The author(s) assume no
18.\" responsibility for errors or omissions, or for damages resulting from
19.\" the use of the information contained herein. The author(s) may not
20.\" have taken the same level of care in the production of this manual,
21.\" which is licensed free of charge, as they might when working
22.\" professionally.
c13182ef 23.\"
fea681da
MK
24.\" Formatted or processed versions of this manual, if unaccompanied by
25.\" the source, must acknowledge the copyright and authors of this work.
4b72fb64 26.\" %%%LICENSE_END
fea681da
MK
27.\"
28.\" Modified Sat Jul 24 00:35:52 1993 by Rik Faith <faith@cs.unc.edu>
29.\" Modified Thu Jun 4 12:21:13 1998 by Andries Brouwer <aeb@cwi.nl>
2d5d4b0d 30.\" Modified Thu Mar 3 09:49:35 2005 by Michael Haardt <michael@moria.de>
f6a4055f 31.\" 2007-03-25, mtk, added various text to DESCRIPTION.
fea681da 32.\"
ab99efdd 33.TH RENAME 2 2014-04-19 "Linux" "Linux Programmer's Manual"
fea681da 34.SH NAME
ab99efdd 35rename, renameat, renameat2 \- change the name or location of a file
fea681da 36.SH SYNOPSIS
9cab982f 37.nf
fea681da
MK
38.B #include <stdio.h>
39.sp
40.BI "int rename(const char *" oldpath ", const char *" newpath );
9cab982f
MK
41.sp
42.BR "#include <fcntl.h> " "/* Definition of AT_* constants */"
43.B #include <stdio.h>
44.sp
45.BI "int renameat(int " olddirfd ", const char *" oldpath ,
46.BI " int " newdirfd ", const char *" newpath );
ab99efdd
MS
47
48.BI "int renameat2(int " olddirfd ", const char *" oldpath ,
84f573db
MK
49.BI " int " newdirfd ", const char *" newpath \
50", unsigned int " flags );
9cab982f
MK
51.fi
52.sp
53.in -4n
54Feature Test Macro Requirements for glibc (see
55.BR feature_test_macros (7)):
56.in
57.sp
58.BR renameat ():
59.PD 0
60.ad l
61.RS 4
62.TP 4
63Since glibc 2.10:
64_XOPEN_SOURCE\ >=\ 700 || _POSIX_C_SOURCE\ >=\ 200809L
65.TP
66Before glibc 2.10:
67_ATFILE_SOURCE
ab99efdd 68.\" FIXME need to define FTMs for renameat2(), once it hits glibc
9cab982f
MK
69.RE
70.ad
71.PD
fea681da 72.SH DESCRIPTION
e511ffb6 73.BR rename ()
fea681da 74renames a file, moving it between directories if required.
fea681da
MK
75Any other hard links to the file (as created using
76.BR link (2))
77are unaffected.
f6a4055f
MK
78Open file descriptors for
79.I oldpath
80are also unaffected.
fea681da
MK
81
82If
83.I newpath
afb3d50c 84already exists, it will be atomically replaced (subject to
e9496f74 85a few conditions; see ERRORS below), so that there is
fea681da
MK
86no point at which another process attempting to access
87.I newpath
88will find it missing.
89
f6a4055f
MK
90If
91.I oldpath
92and
93.I newpath
94are existing hard links referring to the same file, then
95.BR rename ()
96does nothing, and returns a success status.
97
fea681da
MK
98If
99.I newpath
afb3d50c 100exists but the operation fails for some reason,
e511ffb6 101.BR rename ()
fea681da
MK
102guarantees to leave an instance of
103.I newpath
104in place.
105
f6a4055f
MK
106.I oldpath
107can specify a directory.
c13182ef 108In this case,
f6a4055f
MK
109.I newpath
110must either not exist, or it must specify an empty directory.
111
fea681da
MK
112However, when overwriting there will probably be a window in which
113both
114.I oldpath
115and
116.I newpath
117refer to the file being renamed.
118
119If
120.I oldpath
afb3d50c 121refers to a symbolic link, the link is renamed; if
fea681da 122.I newpath
afb3d50c 123refers to a symbolic link, the link will be overwritten.
9cab982f
MK
124.SS renameat ()
125The
126.BR renameat ()
127system call operates in exactly the same way as
cadd38ba 128.BR rename (),
9cab982f
MK
129except for the differences described here.
130
131If the pathname given in
132.I oldpath
133is relative, then it is interpreted relative to the directory
134referred to by the file descriptor
135.I olddirfd
136(rather than relative to the current working directory of
137the calling process, as is done by
cadd38ba 138.BR rename ()
9cab982f
MK
139for a relative pathname).
140
141If
142.I oldpath
143is relative and
144.I olddirfd
145is the special value
146.BR AT_FDCWD ,
147then
148.I oldpath
149is interpreted relative to the current working
150directory of the calling process (like
cadd38ba 151.BR rename ()).
9cab982f
MK
152
153If
154.I oldpath
155is absolute, then
156.I olddirfd
157is ignored.
158
159The interpretation of
160.I newpath
161is as for
162.IR oldpath ,
163except that a relative pathname is interpreted relative
164to the directory referred to by the file descriptor
165.IR newdirfd .
166
167See
168.BR openat (2)
169for an explanation of the need for
170.BR renameat ().
ab99efdd
MS
171.SS renameat2()
172.BR renameat2 ()
173has an additional
174.I flags
175argument.
176A
177.BR renameat2 ()
178call with a zero
179.I flags
180argument is equivalent to
181.BR renameat ().
182
183The
184.I flags
185argument is a bit mask consisting of zero or more of the following flags:
186.TP
187.B RENAME_NOREPLACE
188Don't overwrite
189.IR newpath .
190of the rename.
191Return an error if
192.IR newpath
193already exists.
194.TP
195.B RENAME_EXCHANGE
196Atomically exchange
197.IR oldpath
198and
199.IR newpath .
200Both pathnames must exist
201but may be of different types (e.g., one could be a non-empty directory
202and the other a symbolic link).
47297adb 203.SH RETURN VALUE
c13182ef
MK
204On success, zero is returned.
205On error, \-1 is returned, and
fea681da
MK
206.I errno
207is set appropriately.
208.SH ERRORS
209.TP
210.B EACCES
211Write permission is denied for the directory containing
212.I oldpath
213or
214.IR newpath ,
215or, search permission is denied for one of the directories
216in the path prefix of
217.I oldpath
218or
219.IR newpath ,
220or
221.I oldpath
222is a directory and does not allow write permission (needed to update
223the
836f07c1 224.I ..
fea681da
MK
225entry).
226(See also
ad7cc990 227.BR path_resolution (7).)
fea681da
MK
228.TP
229.B EBUSY
230The rename fails because
231.IR oldpath " or " newpath
232is a directory that is in use by some process (perhaps as
233current working directory, or as root directory, or because
234it was open for reading) or is in use by the system
235(for example as mount point), while the system considers
236this an error.
682edefb 237(Note that there is no requirement to return
0daa9e92 238.B EBUSY
682edefb 239in such
5503c85e
MK
240cases\(emthere is nothing wrong with doing the rename anyway\(embut
241it is allowed to return
682edefb
MK
242.B EBUSY
243if the system cannot otherwise
fea681da
MK
244handle such situations.)
245.TP
a1f01685 246.B EDQUOT
9ee4a2b6 247The user's quota of disk blocks on the filesystem has been exhausted.
a1f01685 248.TP
fea681da
MK
249.B EFAULT
250.IR oldpath " or " newpath " points outside your accessible address space."
251.TP
252.B EINVAL
253The new pathname contained a path prefix of the old, or, more generally,
254an attempt was made to make a directory a subdirectory of itself.
255.TP
256.B EISDIR
257.I newpath
258is an existing directory, but
259.I oldpath
260is not a directory.
261.TP
262.B ELOOP
263Too many symbolic links were encountered in resolving
264.IR oldpath " or " newpath .
265.TP
266.B EMLINK
267.I oldpath
268already has the maximum number of links to it, or
269it was a directory and the directory containing
270.I newpath
271has the maximum number of links.
272.TP
273.B ENAMETOOLONG
274.IR oldpath " or " newpath " was too long."
275.TP
276.B ENOENT
3d81b967
MK
277The link named by
278.I oldpath
279does not exist;
280or, a directory component in
281.I newpath
282does not exist;
283or,
284.I oldpath
285or
286.I newpath
287is an empty string.
fea681da
MK
288.TP
289.B ENOMEM
290Insufficient kernel memory was available.
291.TP
292.B ENOSPC
293The device containing the file has no room for the new directory
294entry.
295.TP
296.B ENOTDIR
297A component used as a directory in
298.IR oldpath " or " newpath
299is not, in fact, a directory.
300Or,
301.I oldpath
302is a directory, and
303.I newpath
304exists but is not a directory.
305.TP
306.BR ENOTEMPTY " or " EEXIST
0daa9e92 307.I newpath
aa796481 308is a nonempty directory, that is, contains entries other than "." and "..".
fea681da
MK
309.TP
310.BR EPERM " or " EACCES
311The directory containing
312.I oldpath
313has the sticky bit
314.RB ( S_ISVTX )
315set and the process's effective user ID is neither
316the user ID of the file to be deleted nor that of the directory
317containing it, and the process is not privileged
318(Linux: does not have the
319.B CAP_FOWNER
320capability);
321or
322.I newpath
323is an existing file and the directory containing it has the sticky bit set
324and the process's effective user ID is neither the user ID of the file
325to be replaced nor that of the directory containing it,
326and the process is not privileged
327(Linux: does not have the
328.B CAP_FOWNER
329capability);
9ee4a2b6 330or the filesystem containing
0daa9e92 331.I pathname
fea681da
MK
332does not support renaming of the type requested.
333.TP
334.B EROFS
9ee4a2b6 335The file is on a read-only filesystem.
fea681da
MK
336.TP
337.B EXDEV
338.IR oldpath " and " newpath
9ee4a2b6
MK
339are not on the same mounted filesystem.
340(Linux permits a filesystem to be mounted at multiple points, but
2777b1ca 341.BR rename ()
2d5d4b0d 342does not work across different mount points,
9ee4a2b6 343even if the same filesystem is mounted on both.)
9cab982f
MK
344.PP
345The following additional errors can occur for
ab99efdd
MS
346.BR renameat ()
347and
348.BR renameat2 ():
9cab982f
MK
349.TP
350.B EBADF
351.I olddirfd
352or
353.I newdirfd
354is not a valid file descriptor.
355.TP
356.B ENOTDIR
357.I oldpath
358is relative and
359.I olddirfd
360is a file descriptor referring to a file other than a directory;
361or similar for
362.I newpath
363and
364.I newdirfd
ab99efdd
MS
365.PP
366The following additional errors can occur for
367.BR renameat2 ():
368.TP
369.B EEXIST
370.I flags
371contains
372.B RENAME_NOREPLACE
373and
374.I newpath
375already exists.
376.TP
377.B EINVAL
5c1517fa
MK
378An invalid flag was specified in
379.IR flags ,
380or both
381.B RENAME_NOREPLACE
382and
383.B RENAME_EXCHANGE
384were specified.
ab99efdd
MS
385.TP
386.B EINVAL
387The filesystem does not support one of the flags in
388.IR flags .
389.TP
390.B ENOENT
391.I flags
8f60952e 392contains
ab99efdd 393.B RENAME_EXCHANGE
8f60952e
MK
394and
395.IR newpath
396does not exist.
9cab982f
MK
397.SH VERSIONS
398.BR renameat ()
399was added to Linux in kernel 2.6.16;
400library support was added to glibc in version 2.4.
4e6c4ab2
MK
401
402.BR renameat2 ()
403was added to Linux in kernel 3.15.
404.\" FIXME glibc support is pending.
47297adb 405.SH CONFORMING TO
9cab982f 406.BR rename ():
1e8473f4 4074.3BSD, C89, C99, POSIX.1-2001, POSIX.1-2008.
9cab982f
MK
408
409.BR renameat ():
410POSIX.1-2008.
4e6c4ab2
MK
411
412.BR renameat2()
413is Linux-specific.
fea681da 414.SH BUGS
9ee4a2b6 415On NFS filesystems, you can not assume that if the operation
afb3d50c 416failed, the file was not renamed.
c13182ef 417If the server does the rename operation
fea681da 418and then crashes, the retransmitted RPC which will be processed when the
c13182ef
MK
419server is up again causes a failure.
420The application is expected to
421deal with this.
422See
fea681da
MK
423.BR link (2)
424for a similar problem.
47297adb 425.SH SEE ALSO
fea681da
MK
426.BR mv (1),
427.BR chmod (2),
428.BR link (2),
fea681da 429.BR symlink (2),
ad7cc990 430.BR unlink (2),
a9cfde1d 431.BR path_resolution (7),
ad22ad55 432.BR symlink (7)