summaryrefslogtreecommitdiffstats
path: root/man-pages-posix-2017/man3p/rename.3p
diff options
context:
space:
mode:
Diffstat (limited to 'man-pages-posix-2017/man3p/rename.3p')
-rw-r--r--man-pages-posix-2017/man3p/rename.3p555
1 files changed, 555 insertions, 0 deletions
diff --git a/man-pages-posix-2017/man3p/rename.3p b/man-pages-posix-2017/man3p/rename.3p
new file mode 100644
index 0000000..383d7ed
--- /dev/null
+++ b/man-pages-posix-2017/man3p/rename.3p
@@ -0,0 +1,555 @@
+'\" et
+.TH RENAME "3P" 2017 "IEEE/The Open Group" "POSIX Programmer's Manual"
+.\"
+.SH PROLOG
+This manual page is part of the POSIX Programmer's Manual.
+The Linux implementation of this interface may differ (consult
+the corresponding Linux manual page for details of Linux behavior),
+or the interface may not be implemented on Linux.
+.\"
+.SH NAME
+rename, renameat
+\(em rename file
+.SH SYNOPSIS
+.LP
+.nf
+#include <stdio.h>
+.P
+int rename(const char *\fIold\fP, const char *\fInew\fP);
+.P
+#include <fcntl.h>
+.P
+int renameat(int \fIoldfd\fP, const char *\fIold\fP, int \fInewfd\fP,
+ const char *\fInew\fP);
+.fi
+.SH DESCRIPTION
+For
+\fIrename\fR():
+The functionality described on this reference page is aligned with the
+ISO\ C standard. Any conflict between the requirements described here and the
+ISO\ C standard is unintentional. This volume of POSIX.1\(hy2017 defers to the ISO\ C standard.
+.P
+The
+\fIrename\fR()
+function shall change the name of a file. The
+.IR old
+argument points to the pathname of the file to be renamed. The
+.IR new
+argument points to the new pathname of the file.
+If the
+.IR new
+argument does not resolve to an existing directory entry for a file of
+type directory and the
+.IR new
+argument contains at least one non-\c
+<slash>
+character and ends with one or more trailing
+<slash>
+characters after all symbolic links have been processed,
+\fIrename\fR()
+shall fail.
+.P
+If either the
+.IR old
+or
+.IR new
+argument names a symbolic link,
+\fIrename\fR()
+shall operate on the symbolic link itself, and shall not resolve the
+last component of the argument. If the
+.IR old
+argument and the
+.IR new
+argument resolve to either the same existing directory entry or different
+directory entries for the same existing file,
+\fIrename\fR()
+shall return successfully and perform no other action.
+.P
+If the
+.IR old
+argument points to the pathname of a file that is not a directory, the
+.IR new
+argument shall not point to the pathname of a directory. If the link
+named by the
+.IR new
+argument exists, it shall be removed and
+.IR old
+renamed to
+.IR new .
+In this case, a link named
+.IR new
+shall remain visible to other threads throughout the renaming operation
+and refer either to the file referred to by
+.IR new
+or
+.IR old
+before the operation began. Write access permission is required for
+both the directory containing
+.IR old
+and the directory containing
+.IR new .
+.P
+If the
+.IR old
+argument points to the pathname of a directory, the
+.IR new
+argument shall not point to the pathname of a file that is not a
+directory. If the directory named by the
+.IR new
+argument exists, it shall be removed and
+.IR old
+renamed to
+.IR new .
+In this case, a link named
+.IR new
+shall exist throughout the renaming operation and shall refer either to
+the directory referred to by
+.IR new
+or
+.IR old
+before the operation began. If
+.IR new
+names an existing directory, it shall be required to be an empty
+directory.
+.P
+If either
+.IR pathname
+argument refers to a path whose final component is either dot or
+dot-dot,
+\fIrename\fR()
+shall fail.
+.P
+If the
+.IR old
+argument points to a pathname of a symbolic link, the symbolic link
+shall be renamed. If the
+.IR new
+argument points to a pathname of a symbolic link, the symbolic link
+shall be removed.
+.P
+The
+.IR old
+pathname shall not name an ancestor directory of the
+.IR new
+pathname. Write access permission is required for the directory containing
+.IR old
+and the directory containing
+.IR new .
+If the
+.IR old
+argument points to the pathname of a directory, write access permission
+may be required for the directory named by
+.IR old ,
+and, if it exists, the directory named by
+.IR new .
+.P
+If the link named by the
+.IR 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
+\fIrename\fR()
+returns, but the removal of the file contents shall be postponed until
+all references to the file are closed.
+.P
+Upon successful completion,
+\fIrename\fR()
+shall mark for update the last data modification and last file status
+change timestamps of the parent directory of each file.
+.P
+If the
+\fIrename\fR()
+function fails for any reason other than
+.BR [EIO] ,
+any file named by
+.IR new
+shall be unaffected.
+.P
+The
+\fIrenameat\fR()
+function shall be equivalent to the
+\fIrename\fR()
+function except in the case where either
+.IR old
+or
+.IR new
+specifies a relative path. If
+.IR old
+is a relative path, the file to be renamed is located relative to the
+directory associated with the file descriptor
+.IR oldfd
+instead of the current working directory. If
+.IR new
+is a relative path, the same happens only relative to the directory
+associated with
+.IR newfd .
+If the access mode of the open file description associated with the
+file descriptor is not O_SEARCH, the function shall check whether
+directory searches are permitted using the current permissions of
+the directory underlying the file descriptor. If the access mode is
+O_SEARCH, the function shall not perform the check.
+.P
+If
+\fIrenameat\fR()
+is passed the special value AT_FDCWD in the
+.IR oldfd
+or
+.IR newfd
+parameter, the current working directory shall be used in the
+determination of the file for the respective
+.IR path
+parameter.
+.SH "RETURN VALUE"
+Upon successful completion, the
+\fIrename\fR()
+function shall return 0. Otherwise, it shall return \-1,
+.IR errno
+shall be set to indicate the error,
+and neither the file named by
+.IR old
+nor the file named by
+.IR new
+shall be changed or created.
+.P
+Upon successful completion, the
+\fIrenameat\fR()
+function shall return 0. Otherwise, it shall return \-1 and set
+.IR errno
+to indicate the error.
+.SH ERRORS
+The
+\fIrename\fR()
+and
+\fIrenameat\fR()
+functions shall fail if:
+.TP
+.BR EACCES
+A component of either path prefix denies search permission; or one of
+the directories containing
+.IR old
+or
+.IR new
+denies write permissions; or, write permission is required and is
+denied for a directory pointed to by the
+.IR old
+or
+.IR new
+arguments.
+.TP
+.BR EBUSY
+The directory named by
+.IR old
+or
+.IR new
+is currently in use by the system or another process, and the
+implementation considers this an error.
+.IP "[EEXIST]\ or\ [ENOTEMPTY]" 12
+.br
+The link named by
+.IR new
+is a directory that is not an empty directory.
+.TP
+.BR EINVAL
+The
+.IR old
+pathname names an ancestor directory of the
+.IR new
+pathname, or either pathname argument contains a final component that
+is dot or dot-dot.
+.TP
+.BR EIO
+A physical I/O error has occurred.
+.TP
+.BR EISDIR
+The
+.IR new
+argument points to a directory and the
+.IR old
+argument points to a file that is not a directory.
+.TP
+.BR ELOOP
+A loop exists in symbolic links encountered during resolution of the
+.IR path
+argument.
+.TP
+.BR EMLINK
+The file named by
+.IR old
+is a directory, and the link count of the parent directory of
+.IR new
+would exceed
+{LINK_MAX}.
+.TP
+.BR ENAMETOOLONG
+.br
+The length of a component of a pathname is longer than
+{NAME_MAX}.
+.TP
+.BR ENOENT
+The link named by
+.IR old
+does not name an existing file, a component of the path prefix of
+.IR new
+does not exist, or either
+.IR old
+or
+.IR new
+points to an empty string.
+.TP
+.BR ENOSPC
+The directory that would contain
+.IR new
+cannot be extended.
+.TP
+.BR ENOTDIR
+A component of either path prefix names an existing file that is
+neither a directory nor a symbolic link to a directory; or the
+.IR old
+argument names a directory and the
+.IR new
+argument names a non-directory file; or the
+.IR old
+argument contains at least one non-\c
+<slash>
+character and ends with one or more trailing
+<slash>
+characters and the last pathname component names an existing file that
+is neither a directory nor a symbolic link to a directory; or the
+.IR old
+argument names an existing non-directory file and the
+.IR new
+argument names a nonexistent file, contains at least one non-\c
+<slash>
+character, and ends with one or more trailing
+<slash>
+characters; or the
+.IR new
+argument names an existing non-directory file, contains at least one non-\c
+<slash>
+character, and ends with one or more trailing
+<slash>
+characters.
+.TP
+.BR EPERM " or " EACCES
+.br
+The S_ISVTX flag is set on the directory containing the file referred
+to by
+.IR old
+and the process does not satisfy the criteria specified in the Base Definitions volume of POSIX.1\(hy2017,
+.IR "Section 4.3" ", " "Directory Protection"
+with respect to
+.IR old ;
+or
+.IR new
+refers to an existing file, the S_ISVTX flag is set on the directory
+containing this file, and the process does not satisfy the criteria
+specified in the Base Definitions volume of POSIX.1\(hy2017,
+.IR "Section 4.3" ", " "Directory Protection"
+with respect to this file.
+.TP
+.BR EROFS
+The requested operation requires writing in a directory on a read-only
+file system.
+.TP
+.BR EXDEV
+The links named by
+.IR new
+and
+.IR old
+are on different file systems and the implementation does not support
+links between file systems.
+.P
+In addition, the
+\fIrenameat\fR()
+function shall fail if:
+.TP
+.BR EACCES
+The access mode of the open file description associated with
+.IR oldfd
+or
+.IR newfd
+is not O_SEARCH and the permissions of the directory underlying
+.IR oldfd
+or
+.IR newfd ,
+respectively, do not permit directory searches.
+.TP
+.BR EBADF
+The
+.IR old
+argument does not specify an absolute path and the
+.IR oldfd
+argument is neither AT_FDCWD nor a valid file descriptor open for
+reading or searching, or the
+.IR new
+argument does not specify an absolute path and the
+.IR newfd
+argument is neither AT_FDCWD nor a valid file descriptor open
+for reading or searching.
+.TP
+.BR ENOTDIR
+The
+.IR old
+or
+.IR new
+argument is not an absolute path and
+.IR oldfd
+or
+.IR newfd ,
+respectively, is a file descriptor associated with a non-directory file.
+.P
+The
+\fIrename\fR()
+and
+\fIrenameat\fR()
+functions may fail if:
+.TP
+.BR EBUSY
+The file named by the
+.IR old
+or
+.IR new
+arguments is a named STREAM.
+.TP
+.BR ELOOP
+More than
+{SYMLOOP_MAX}
+symbolic links were encountered during resolution of the
+.IR path
+argument.
+.TP
+.BR ENAMETOOLONG
+.br
+The length of a pathname exceeds
+{PATH_MAX},
+or pathname resolution of a symbolic link produced an intermediate
+result with a length that exceeds
+{PATH_MAX}.
+.TP
+.BR ETXTBSY
+The file named by
+.IR new
+exists and is the last directory entry to a pure procedure (shared text)
+file that is being executed.
+.LP
+.IR "The following sections are informative."
+.SH EXAMPLES
+.SS "Renaming a File"
+.P
+The following example shows how to rename a file named
+.BR /home/cnd/mod1
+to
+.BR /home/cnd/mod2 .
+.sp
+.RS 4
+.nf
+
+#include <stdio.h>
+.P
+int status;
+\&...
+status = rename("/home/cnd/mod1", "/home/cnd/mod2");
+.fi
+.P
+.RE
+.SH "APPLICATION USAGE"
+Some implementations mark for update the last file status change timestamp
+of renamed files and some do not. Applications which make use of the
+last file status change timestamp may behave differently with respect
+to renamed files unless they are designed to allow for either behavior.
+.SH RATIONALE
+This
+\fIrename\fR()
+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
+.IR new
+parameter names a file that already exists. That specification
+requires that the action of the function be atomic.
+.P
+One of the reasons for introducing this function was to have a means of
+renaming directories while permitting implementations to prohibit the
+use of
+\fIlink\fR()
+and
+\fIunlink\fR()
+with directories, thus constraining links to directories to those made by
+\fImkdir\fR().
+.P
+The specification that if
+.IR old
+and
+.IR new
+refer to the same file is intended to guarantee that:
+.sp
+.RS 4
+.nf
+
+rename("x", "x");
+.fi
+.P
+.RE
+.P
+does not remove the file.
+.P
+Renaming dot or dot-dot is prohibited in order to prevent cyclical file
+system paths.
+.P
+See also the descriptions of
+.BR [ENOTEMPTY]
+and
+.BR [ENAMETOOLONG]
+in
+\fIrmdir\fR()
+and
+.BR [EBUSY]
+in
+\fIunlink\fR().
+For a discussion of
+.BR [EXDEV] ,
+see
+\fIlink\fR().
+.P
+The purpose of the
+\fIrenameat\fR()
+function is to rename files in directories other than the current
+working directory without exposure to race conditions. Any part of the
+path of a file could be changed in parallel to a call to
+\fIrename\fR(),
+resulting in unspecified behavior. By opening file descriptors for the
+source and target directories and using the
+\fIrenameat\fR()
+function it can be guaranteed that that renamed file is located correctly
+and the resulting file is in the desired directory.
+.SH "FUTURE DIRECTIONS"
+None.
+.SH "SEE ALSO"
+.IR "\fIlink\fR\^(\|)",
+.IR "\fIrmdir\fR\^(\|)",
+.IR "\fIsymlink\fR\^(\|)",
+.IR "\fIunlink\fR\^(\|)"
+.P
+The Base Definitions volume of POSIX.1\(hy2017,
+.IR "Section 4.3" ", " "Directory Protection",
+.IR "\fB<fcntl.h>\fP",
+.IR "\fB<stdio.h>\fP"
+.\"
+.SH COPYRIGHT
+Portions of this text are reprinted and reproduced in electronic form
+from IEEE Std 1003.1-2017, Standard for Information Technology
+-- Portable Operating System Interface (POSIX), The Open Group Base
+Specifications Issue 7, 2018 Edition,
+Copyright (C) 2018 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 .
+.PP
+Any typographical or formatting errors that appear
+in this page are most likely
+to have been introduced during the conversion of the source files to
+man page format. To report such errors, see
+https://www.kernel.org/doc/man-pages/reporting_bugs.html .