Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
RENAME(2)		      System Calls Manual		     RENAME(2)

NAME
       rename -- change	the name of a file

LIBRARY
       Standard	C Library (libc, -lc)

SYNOPSIS
       #include	<stdio.h>

       int
       rename(const char *from,	const char *to);

       int
       renameat(int fromfd, const char *from, int tofd,	const char *to);

       #include	<sys/fcntl.h>
       #include	<stdio.h>

       int
       renameat2(int fromfd,   const char *from,   int tofd,   const char *to,
	   unsigned int	flags);

DESCRIPTION
       The rename() system call	causes the link	named from to  be  renamed  as
       to.   If	 to  exists, it	is first removed.  Both	from and to must be of
       the same	type (that is, both directories	or both	non-directories),  and
       must reside on the same file system.

       The  rename()  system call guarantees that if to	already	exists,	an in-
       stance of to will always	exist, even if the system should crash in  the
       middle of the operation.

       If the final component of from is a symbolic link, the symbolic link is
       renamed,	not the	file or	directory to which it points.

       If from and to resolve to the same directory entry, or to different di-
       rectory	entries	 for  the same existing	file, rename() returns success
       without taking any further action.

       The renameat() system call is equivalent	to rename() except in the case
       where either from or to specifies a relative path.  If from is a	 rela-
       tive  path, the file to be renamed is located relative to the directory
       associated with the file	descriptor fromfd instead of the current work-
       ing directory.  If the to is a relative path,  the  same	 happens  only
       relative	 to  the directory associated with tofd.  If the renameat() is
       passed the special value	AT_FDCWD in the	fromfd or tofd parameter,  the
       current	working	directory is used in the determination of the file for
       the respective path parameter.

       The renameat2() system call takes an  additional	 flags	argument.   If
       flags is	zero, the renameat2() call operates identically	to renameat().
       Additionally, the following flags can be	specified:

       AT_RENAME_NOREPLACE  If	the  path specified by tofd and	to exists, the
			    request fails with the error EEXIST.

RETURN VALUES
       The rename() function returns the value 0 if successful;	otherwise  the
       value  -1  is returned and the global variable errno is set to indicate
       the error.

ERRORS
       The rename() system call	will fail and neither of  the  argument	 files
       will be affected	if:

       [ENAMETOOLONG]	  A  component of either pathname exceeded 255 charac-
			  ters,	or the entire length of	either path  name  ex-
			  ceeded 1023 characters.

       [ENOENT]		  A  component	of  the	from path does not exist, or a
			  path prefix of to does not exist.

       [EACCES]		  A component of either	path prefix denies search per-
			  mission.

       [EACCES]		  The requested	link requires writing in  a  directory
			  with a mode that denies write	permission.

       [EACCES]		  The directory	pointed	at by the from argument	denies
			  write	permission, and	the operation would move it to
			  another parent directory.

       [EPERM]		  The file pointed at by the from argument has its im-
			  mutable,  undeletable	 or  append-only flag set, see
			  the chflags(2) manual	page for more information.

       [EPERM]		  The parent directory of the file pointed at  by  the
			  from	argument has its immutable or append-only flag
			  set.

       [EPERM]		  The parent directory of the file pointed at  by  the
			  to argument has its immutable	flag set.

       [EPERM]		  The  directory containing from is marked sticky, and
			  neither the containing directory nor from are	 owned
			  by the effective user	ID.

       [EPERM]		  The  file  pointed at	by the to argument exists, the
			  directory containing to is marked sticky,  and  nei-
			  ther	the  containing	 directory nor to are owned by
			  the effective	user ID.

       [ELOOP]		  Too many symbolic links were encountered  in	trans-
			  lating either	pathname.

       [ENOTDIR]	  A  component	of  either path	prefix is not a	direc-
			  tory.

       [ENOTDIR]	  The from argument is a directory, but	to  is	not  a
			  directory.

       [EISDIR]		  The  to  argument  is	a directory, but from is not a
			  directory.

       [EXDEV]		  The link named by to and the file named by from  are
			  on  different	 logical devices (file systems).  Note
			  that this error code will not	be returned if the im-
			  plementation permits cross-device links.

       [ENOSPC]		  The directory	in which the entry for the new name is
			  being	placed cannot be extended because there	is  no
			  space	 left on the file system containing the	direc-
			  tory.

       [EDQUOT]		  The directory	in which the entry for the new name is
			  being	placed cannot be extended because  the	user's
			  quota	 of  disk blocks on the	file system containing
			  the directory	has been exhausted.

       [EIO]		  An I/O error occurred	while making or	updating a di-
			  rectory entry.

       [EINTEGRITY]	  Corrupted data was detected while reading  from  the
			  file system.

       [EROFS]		  The  requested  link requires	writing	in a directory
			  on a read-only file system.

       [EFAULT]		  Path points outside the process's allocated  address
			  space.

       [EINVAL]		  The from argument is a parent	directory of to, or an
			  attempt is made to rename `.'	or `..'.

       [EINVAL]		  The  last component of the to	path is	invalid	on the
			  target file system.

       [ENOTEMPTY]	  The to argument is a directory and is	not empty.

       [ECAPMODE]	  rename() was called and the process is in capability
			  mode.

       In addition to the errors returned by the rename(), the renameat()  may
       fail if:

       [EBADF]		  The  from argument does not specify an absolute path
			  and the fromfd argument is neither  AT_FDCWD	nor  a
			  valid	 file descriptor open for searching, or	the to
			  argument does	not specify an absolute	path  and  the
			  tofd	argument  is neither AT_FDCWD nor a valid file
			  descriptor open for searching.

       [ENOTDIR]	  The from argument is not an absolute path and	fromfd
			  is neither AT_FDCWD nor a file descriptor associated
			  with a directory, or the to argument is not  an  ab-
			  solute  path and tofd	is neither AT_FDCWD nor	a file
			  descriptor associated	with a directory.

       [ECAPMODE]	  AT_FDCWD is specified	and the	process	is in capabil-
			  ity mode.

       [ENOTCAPABLE]	  path is an absolute path or contained	a ".."	compo-
			  nent leading to a directory outside of the directory
			  hierarchy specified by fromfd	or tofd.

       [ENOTCAPABLE]	  The	  fromfd    file    descriptor	  lacks	   the
			  CAP_RENAMEAT_SOURCE right, or	the tofd file descrip-
			  tor lacks the	CAP_RENAMEAT_TARGET right.

       In addition to the errors returned by the renameat() system  call,  the
       renameat2() system call may fail	if:

       [EEXIST]		  The  AT_RENAME_NOREPLACE  flag  was  provided, and a
			  file exists at the path specified by to.

       [EOPNOTSUPP]	  One of the flags specified is	not supported  by  the
			  filesystem where the to-be renamed file is located.

CAVEATS
       If  the filesystem which	owns the file to be renamed does not implement
       the AT_RENAME_NOREPLACE flag, it	is possible that due to	race with tar-
       get file	creation, the error returned by	the  renameat2()  system  call
       would be	non-deterministically either EEXIST or EOPNOTSUPP.

SEE ALSO
       chflags(2), open(2), symlink(7)

STANDARDS
       The  rename() system call is expected to	conform	to ISO/IEC 9945-1:1996
       ("POSIX.1").  The renameat() system call	follows	 The  Open  Group  Ex-
       tended API Set 2	specification.

HISTORY
       The  renameat()	system	call appeared in FreeBSD 8.0.  The renameat2()
       system call appeared in FreeBSD 16.0.

FreeBSD	ports 15.quarterly	August 25, 2024			     RENAME(2)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=renameat&sektion=2&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help