Go to the previous, next section.
The rename
function is used to change a file's name.
Function: int rename (const char *oldname, const char *newname)
The rename
function renames the file name oldname with
newname. The file formerly accessible under the name
oldname is afterward accessible as newname instead. (If the
file had any other names aside from oldname, it continues to have
those names.)
The directory containing the name newname must be on the same file system as the file (as indicated by the name oldname).
One special case for rename
is when oldname and
newname are two names for the same file. The consistent way to
handle this case is to delete oldname. However, POSIX says that
in this case rename
does nothing and reports success--which is
inconsistent. We don't know what your operating system will do. The
GNU system, when completed, will probably do the right thing (delete
oldname) unless you explicitly request strict POSIX compatibility
"even when it hurts".
If the oldname is not a directory, then any existing file named
newname is removed during the renaming operation. However, if
newname is the name of a directory, rename
fails in this
case.
If the oldname is a directory, then either newname must not
exist or it must name a directory that is empty. In the latter case,
the existing directory named newname is deleted first. The name
newname must not specify a subdirectory of the directory
oldname
which is being renamed.
One useful feature of rename
is that the meaning of the name
newname changes "atomically" from any previously existing file
by that name to its new meaning (the file that was called
oldname). There is no instant at which newname is
nonexistent "in between" the old meaning and the new meaning.
If rename
fails, it returns -1
. In addition to the usual
file name syntax errors (see section File Name Errors), the following
errno
error conditions are defined for this function:
EACCES
EBUSY
EEXIST
ENOTEMPTY
EINVAL
EISDIR
EMLINK
Well-designed file systems never report this error, because they permit more links than your disk could possibly hold. However, you must still take account of the possibility of this error, as it could result from network access to a file system on another machine.
ENOENT
ENOSPC
EROFS
EXDEV
Go to the previous, next section.