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

olddirfdnewdirfd 不是有效的文件描述符。

ENOTDIR
oldpath 是相对路径且 olddirfd 是引用非目录文件的文件描述符;或者对于 newpathnewdirfd 也是如此。

版本

renameat() 被添加到 Linux 内核 2.6.16 中;库支持被添加到 glibc 2.4 版本中。

符合

POSIX.1-2008。

说明

有关 renameat() 的必要性的解释,请参阅 openat(2)。

参见

openat(2), rename(2), path_resolution(7)