Scroll to navigation

RENAMEAT(2) Руководство программиста Linux RENAMEAT(2)

ИМЯ

renameat - переименовывает файл, указанный относительно файловых дескрипторов каталогов

ОБЗОР

#include <fcntl.h> /* определения констант AT_* */
#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 содержится код ошибки.

ОШИБКИ

В renameat() могут возникнуть те же ошибки, что и в rename(2). Также, в renameat() могут возникнуть следующие ошибки:

olddirfd или newdirfd не является правильным файловым дескриптором.
Значение oldpath содержит относительный путь и olddirfd содержит файловый дескриптор, указывающий на файл, а не на каталог; или произошло тоже самое с newpath и newdirfd.

ВЕРСИИ

Системный вызов renameat() был добавлен в ядро Linux версии 2.6.16; поддержка в glibc доступна с версии 2.4.

СООТВЕТСТВИЕ СТАНДАРТАМ

POSIX.1-2008.

ЗАМЕЧАНИЯ

Смотрите в openat(2) объяснение необходимости renameat().

СМОТРИТЕ ТАКЖЕ

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

2012-05-04 Linux