Originální popis anglicky: 
rename - rename a file
Návod, kniha: POSIX Programmer's Manual
#include <stdio.h>
 
 
int rename(const char * 
old, const char
  *new );
 
The 
rename() function shall change the name of a file. The 
old
  argument points to the pathname of the file to be renamed. The 
new
  argument points to the new pathname of the file.
If either the 
old or 
new argument names a symbolic link,
  
rename() shall operate on the symbolic link itself, and shall not
  resolve the last component of the argument. If the 
old argument and the
  
new argument resolve to the same existing file, 
rename() shall
  return successfully and perform no other action.
If the 
old argument points to the pathname of a file that is not a
  directory, the 
new argument shall not point to the pathname of a
  directory. If the link named by the 
new argument exists, it shall be
  removed and 
old renamed to 
new. In this case, a link named
  
new shall remain visible to other processes throughout the renaming
  operation and refer either to the file referred to by 
new or 
old
  before the operation began. Write access permission is required for both the
  directory containing 
old and the directory containing 
new.
If the 
old argument points to the pathname of a directory, the 
new
  argument shall not point to the pathname of a file that is not a directory. If
  the directory named by the 
new argument exists, it shall be removed and
  
old renamed to 
new. In this case, a link named 
new shall
  exist throughout the renaming operation and shall refer either to the
  directory referred to by 
new or 
old before the operation began.
  If 
new names an existing directory, it shall be required to be an empty
  directory.
If the 
old argument points to a pathname of a symbolic link, the symbolic
  link shall be renamed. If the 
new argument points to a pathname of a
  symbolic link, the symbolic link shall be removed.
The 
new pathname shall not contain a path prefix that names 
old.
  Write access permission is required for the directory containing 
old
  and the directory containing 
new. If the 
old argument points to
  the pathname of a directory, write access permission may be required for the
  directory named by 
old, and, if it exists, the directory named by
  
new.
If the link named by the 
new argument exists and the file's link count
  becomes 0 when it is removed and no process has the file open, the space
  occupied by the file shall be freed and the file shall no longer be
  accessible. If one or more processes have the file open when the last link is
  removed, the link shall be removed before 
rename() returns, but the
  removal of the file contents shall be postponed until all references to the
  file are closed.
Upon successful completion, 
rename() shall mark for update the
  
st_ctime and 
st_mtime fields of the parent directory of each
  file.
If the 
rename() function fails for any reason other than [EIO], any file
  named by 
new shall be unaffected.
Upon successful completion, 
rename() shall return 0; otherwise, -1 shall
  be returned, 
errno shall be set to indicate the error, and neither the
  file named by 
old nor the file named by 
new shall be changed or
  created.
The 
rename() function shall fail if:
  - EACCES
- A component of either path prefix denies search permission;
      or one of the directories containing old or new denies write
      permissions; or, write permission is required and is denied for a
      directory pointed to by the old or new arguments.
  - EBUSY
- The directory named by old or new is
      currently in use by the system or another process, and the implementation
      considers this an error.
  - EEXIST or ENOTEMPTY
- 
      The link named by new is a directory that is not an empty
    directory.
  - EINVAL
- The new directory pathname contains a path prefix
      that names the old directory.
  - EIO
- A physical I/O error has occurred.
  - EISDIR
- The new argument points to a directory and the
      old argument points to a file that is not a directory.
  - ELOOP
- A loop exists in symbolic links encountered during
      resolution of the path argument.
  - EMLINK
- The file named by old is a directory, and the link
      count of the parent directory of new would exceed {LINK_MAX}.
  - ENAMETOOLONG
- 
      The length of the old or new argument exceeds {PATH_MAX} or a
      pathname component is longer than {NAME_MAX}.
  - ENOENT
- The link named by old does not name an existing
      file, or either old or new points to an empty string.
  - ENOSPC
- The directory that would contain new cannot be
      extended.
  - ENOTDIR
- A component of either path prefix is not a directory; or
      the old argument names a directory and new argument names a
      non-directory file.
  - EPERM or EACCES
- 
      The S_ISVTX flag is set on the directory containing the file referred to by
      old and the caller is not the file owner, nor is the caller the
      directory owner, nor does the caller have appropriate privileges; or
      new refers to an existing file, the S_ISVTX flag is set on the
      directory containing this file, and the caller is not the file owner, nor
      is the caller the directory owner, nor does the caller have appropriate
      privileges.
  - EROFS
- The requested operation requires writing in a directory on
      a read-only file system.
  - EXDEV
- The links named by new and old are on
      different file systems and the implementation does not support links
      between file systems.
      
The 
rename() function may fail if:
  - EBUSY
- The file named by the old or new arguments is
      a named STREAM.
  - ELOOP
- More than {SYMLOOP_MAX} symbolic links were encountered
      during resolution of the path argument.
  - ENAMETOOLONG
- 
      As a result of encountering a symbolic link in resolution of the path
      argument, the length of the substituted pathname string exceeded
      {PATH_MAX}.
  - ETXTBSY
- The file to be renamed is a pure procedure (shared text)
      file that is being executed.
      
The following sections are informative.
The following example shows how to rename a file named 
/home/cnd/mod1 to
  
/home/cnd/mod2.
 
#include <stdio.h>
 
int status;
...
status = rename("/home/cnd/mod1", "/home/cnd/mod2");
 
Some implementations mark for update the 
st_ctime field of renamed files
  and some do not. Applications which make use of the 
st_ctime field may
  behave differently with respect to renamed files unless they are designed to
  allow for either behavior.
This 
rename() function is equivalent for regular files to that defined by
  the ISO C standard. Its inclusion here expands that definition to
  include actions on directories and specifies behavior when the 
new
  parameter names a file that already exists. That specification requires that
  the action of the function be atomic.
One of the reasons for introducing this function was to have a means of renaming
  directories while permitting implementations to prohibit the use of
  
link() and 
unlink() with directories, thus constraining links to
  directories to those made by 
mkdir().
The specification that if 
old and 
new refer to the same file is
  intended to guarantee that:
 
does not remove the file.
Renaming dot or dot-dot is prohibited in order to prevent cyclical file system
  paths.
See also the descriptions of [ENOTEMPTY] and [ENAMETOOLONG] in 
rmdir()
  and [EBUSY] in 
unlink() . For a discussion of [EXDEV], see
  
link() .
None.
link() , 
rmdir() , 
symlink() , 
unlink() , the Base
  Definitions volume of IEEE Std 1003.1-2001,
  
<stdio.h>
Portions of this text are reprinted and reproduced in electronic form from IEEE
  Std 1003.1, 2003 Edition, Standard for Information Technology -- Portable
  Operating System Interface (POSIX), The Open Group Base Specifications Issue
  6, Copyright (C) 2001-2003 by the Institute of Electrical and Electronics
  Engineers, Inc and The Open Group. In the event of any discrepancy between
  this version and the original IEEE and The Open Group Standard, the original
  IEEE and The Open Group Standard is the referee document. The original
  Standard can be obtained online at http://www.opengroup.org/unix/online.html
  .