]> git.ipfire.org Git - thirdparty/man-pages.git/blame_incremental - man2/rename.2
intro.1, _exit.2, access.2, alarm.2, alloc_hugepages.2, arch_prctl.2, bind.2, chdir...
[thirdparty/man-pages.git] / man2 / rename.2
... / ...
CommitLineData
1.\" This manpage is Copyright (C) 1992 Drew Eckhardt;
2.\" 1993 Michael Haardt;
3.\" 1993,1995 Ian Jackson.
4.\"
5.\" %%%LICENSE_START(VERBATIM)
6.\" Permission is granted to make and distribute verbatim copies of this
7.\" manual provided the copyright notice and this permission notice are
8.\" preserved on all copies.
9.\"
10.\" Permission is granted to copy and distribute modified versions of this
11.\" manual under the conditions for verbatim copying, provided that the
12.\" entire resulting derived work is distributed under the terms of a
13.\" permission notice identical to this one.
14.\"
15.\" Since the Linux kernel and libraries are constantly changing, this
16.\" manual page may be incorrect or out-of-date. The author(s) assume no
17.\" responsibility for errors or omissions, or for damages resulting from
18.\" the use of the information contained herein. The author(s) may not
19.\" have taken the same level of care in the production of this manual,
20.\" which is licensed free of charge, as they might when working
21.\" professionally.
22.\"
23.\" Formatted or processed versions of this manual, if unaccompanied by
24.\" the source, must acknowledge the copyright and authors of this work.
25.\" %%%LICENSE_END
26.\"
27.\" Modified Sat Jul 24 00:35:52 1993 by Rik Faith <faith@cs.unc.edu>
28.\" Modified Thu Jun 4 12:21:13 1998 by Andries Brouwer <aeb@cwi.nl>
29.\" Modified Thu Mar 3 09:49:35 2005 by Michael Haardt <michael@moria.de>
30.\" 2007-03-25, mtk, added various text to DESCRIPTION.
31.\"
32.TH RENAME 2 2013-01-27 "Linux" "Linux Programmer's Manual"
33.SH NAME
34rename \- change the name or location of a file
35.SH SYNOPSIS
36.B #include <stdio.h>
37.sp
38.BI "int rename(const char *" oldpath ", const char *" newpath );
39.SH DESCRIPTION
40.BR rename ()
41renames a file, moving it between directories if required.
42Any other hard links to the file (as created using
43.BR link (2))
44are unaffected.
45Open file descriptors for
46.I oldpath
47are also unaffected.
48
49If
50.I newpath
51already exists it will be atomically replaced (subject to
52a few conditions; see ERRORS below), so that there is
53no point at which another process attempting to access
54.I newpath
55will find it missing.
56
57If
58.I oldpath
59and
60.I newpath
61are existing hard links referring to the same file, then
62.BR rename ()
63does nothing, and returns a success status.
64
65If
66.I newpath
67exists but the operation fails for some reason
68.BR rename ()
69guarantees to leave an instance of
70.I newpath
71in place.
72
73.I oldpath
74can specify a directory.
75In this case,
76.I newpath
77must either not exist, or it must specify an empty directory.
78
79However, when overwriting there will probably be a window in which
80both
81.I oldpath
82and
83.I newpath
84refer to the file being renamed.
85
86If
87.I oldpath
88refers to a symbolic link the link is renamed; if
89.I newpath
90refers to a symbolic link the link will be overwritten.
91.SH RETURN VALUE
92On success, zero is returned.
93On error, \-1 is returned, and
94.I errno
95is set appropriately.
96.SH ERRORS
97.TP
98.B EACCES
99Write permission is denied for the directory containing
100.I oldpath
101or
102.IR newpath ,
103or, search permission is denied for one of the directories
104in the path prefix of
105.I oldpath
106or
107.IR newpath ,
108or
109.I oldpath
110is a directory and does not allow write permission (needed to update
111the
112.I ..
113entry).
114(See also
115.BR path_resolution (7).)
116.TP
117.B EBUSY
118The rename fails because
119.IR oldpath " or " newpath
120is a directory that is in use by some process (perhaps as
121current working directory, or as root directory, or because
122it was open for reading) or is in use by the system
123(for example as mount point), while the system considers
124this an error.
125(Note that there is no requirement to return
126.B EBUSY
127in such
128cases\(emthere is nothing wrong with doing the rename anyway\(embut
129it is allowed to return
130.B EBUSY
131if the system cannot otherwise
132handle such situations.)
133.TP
134.B EDQUOT
135The user's quota of disk blocks on the file system has been exhausted.
136.TP
137.B EFAULT
138.IR oldpath " or " newpath " points outside your accessible address space."
139.TP
140.B EINVAL
141The new pathname contained a path prefix of the old, or, more generally,
142an attempt was made to make a directory a subdirectory of itself.
143.TP
144.B EISDIR
145.I newpath
146is an existing directory, but
147.I oldpath
148is not a directory.
149.TP
150.B ELOOP
151Too many symbolic links were encountered in resolving
152.IR oldpath " or " newpath .
153.TP
154.B EMLINK
155.I oldpath
156already has the maximum number of links to it, or
157it was a directory and the directory containing
158.I newpath
159has the maximum number of links.
160.TP
161.B ENAMETOOLONG
162.IR oldpath " or " newpath " was too long."
163.TP
164.B ENOENT
165The link named by
166.I oldpath
167does not exist;
168or, a directory component in
169.I newpath
170does not exist;
171or,
172.I oldpath
173or
174.I newpath
175is an empty string.
176.TP
177.B ENOMEM
178Insufficient kernel memory was available.
179.TP
180.B ENOSPC
181The device containing the file has no room for the new directory
182entry.
183.TP
184.B ENOTDIR
185A component used as a directory in
186.IR oldpath " or " newpath
187is not, in fact, a directory.
188Or,
189.I oldpath
190is a directory, and
191.I newpath
192exists but is not a directory.
193.TP
194.BR ENOTEMPTY " or " EEXIST
195.I newpath
196is a nonempty directory, that is, contains entries other than "." and "..".
197.TP
198.BR EPERM " or " EACCES
199The directory containing
200.I oldpath
201has the sticky bit
202.RB ( S_ISVTX )
203set and the process's effective user ID is neither
204the user ID of the file to be deleted nor that of the directory
205containing it, and the process is not privileged
206(Linux: does not have the
207.B CAP_FOWNER
208capability);
209or
210.I newpath
211is an existing file and the directory containing it has the sticky bit set
212and the process's effective user ID is neither the user ID of the file
213to be replaced nor that of the directory containing it,
214and the process is not privileged
215(Linux: does not have the
216.B CAP_FOWNER
217capability);
218or the file system containing
219.I pathname
220does not support renaming of the type requested.
221.TP
222.B EROFS
223The file is on a read-only file system.
224.TP
225.B EXDEV
226.IR oldpath " and " newpath
227are not on the same mounted file system.
228(Linux permits a file system to be mounted at multiple points, but
229.BR rename ()
230does not work across different mount points,
231even if the same file system is mounted on both.)
232.SH CONFORMING TO
2334.3BSD, C89, C99, POSIX.1-2001.
234.SH BUGS
235On NFS file systems, you can not assume that if the operation
236failed the file was not renamed.
237If the server does the rename operation
238and then crashes, the retransmitted RPC which will be processed when the
239server is up again causes a failure.
240The application is expected to
241deal with this.
242See
243.BR link (2)
244for a similar problem.
245.SH SEE ALSO
246.BR mv (1),
247.BR chmod (2),
248.BR link (2),
249.BR renameat (2),
250.BR symlink (2),
251.BR unlink (2),
252.BR path_resolution (7),
253.BR symlink (7)