renameat(2) - Linux 手册页
名称
renameat - 相对于文件描述符重命名文件
概要
#include <fcntl.h> /* Definition of AT_* constants */ #include <stdio.h> int renameat(int olddirfd, const char *oldpath, int newdirfd, const char *newpath);glibc 的功能测试宏要求(参见 feature_test_macros(7))
- renameat():
- 自 glibc 2.10 起
- _XOPEN_SOURCE >= 700 || _POSIX_C_SOURCE >= 200809L
- glibc 2.10 之前
- _ATFILE_SOURCE
描述
renameat() 系统调用与 rename(2) 的工作方式完全相同,除了本手册页中描述的差异。
如果在 oldpath 中给定的路径名是相对路径,则它将相对于由文件描述符 olddirfd 指示的目录进行解释(而不是相对于调用进程的当前工作目录,如 rename(2) 为相对路径名所做的那样)。
如果 oldpath 是相对路径且 olddirfd 是特殊值 AT_FDCWD,则 oldpath 将相对于调用进程的当前工作目录进行解释(就像 rename(2) 一样)。
如果 oldpath 是绝对路径,则会忽略 olddirfd。
newpath 的解释方式与 oldpath 相同,除了相对路径名将相对于由文件描述符 newdirfd 指示的目录进行解释。
返回值
成功时,renameat() 返回 0。发生错误时,返回 -1 并且 errno 被设置为指示错误。
错误
与 rename(2) 相同的错误也可能发生在 renameat() 中。以下是可能发生在 renameat() 中的附加错误:
- EBADF
olddirfd 或 newdirfd 不是有效的文件描述符。
- ENOTDIR
- oldpath 是相对路径且 olddirfd 是引用非目录文件的文件描述符;或者对于 newpath 和 newdirfd 也是如此。
版本
renameat() 被添加到 Linux 内核 2.6.16 中;库支持被添加到 glibc 2.4 版本中。
符合
POSIX.1-2008。
说明
有关 renameat() 的必要性的解释,请参阅 openat(2)。
参见
openat(2), rename(2), path_resolution(7)