trusty (3) rename.3posix.gz

Provided by: manpages-posix-dev_2.16-1_all bug

NAME

       rename - rename a file

SYNOPSIS

       #include <stdio.h>

       int rename(const char *old, const char *new);

DESCRIPTION

       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.

RETURN VALUE

       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.

ERRORS

       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.

EXAMPLES

   Renaming a File
       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");

APPLICATION USAGE

       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.

RATIONALE

       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:

              rename("x", "x");

       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() .

FUTURE DIRECTIONS

       None.

SEE ALSO

       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 .