rename

Autres langues

Langue: ru

Version: 24 July 1993 (fedora - 25/11/07)

Autres sections - même nom

Section: 2 (Appels système)

ИМЯ

rename - изменить имя или расположение файла

КРАТКАЯ СВОДКА

#include <unistd.h>

int rename(const char *oldpath, const char *newpath);

ОПИСАНИЕ

rename переименовывает файл, перемещая его между каталогами, если требуется.

Все прочие жесткие ссылки на файл (созданные с помощью link(2)) не изменяются.

Если newpath уже существует, то он будет атомарно перезаписан (при определенных условиях - смотри ОШИБКИ ниже), так что нет ни одной точки, когда другой процесс, пытающийся обратиться к newpath, не обнаружит его.

Если newpath существует, но операция завершается неуспешно или система аварийно завершает работу, rename гарантируется, что newpath останется нетронутым.

При перезаписи, однако, вероятно будет окно, в котором oldpath и newpath ссылаются на один и тот же файл.

Если oldpath является символической ссылкой, то она переименовывается; если newpath является символической ссылкой, то будет перезаписан файл, на который она указывает.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

В случае успеха возвращается ноль. При ошибке возвращается -1, а errno устанавливается должным образом.

ОШИБКИ

EISDIR
newpath является существующим каталогом, но oldpath не является каталогом
EXDEV
oldpath и newpath находятся на разных файловых системах.
ENOTEMPTY
newpath является непустым каталогом.
EBUSY
newpath существует и является текущим рабочим каталогом или корневым каталогом какого-то процесса.
EEXIST
Новое имя пути совпадает с началом старого имени.
EINVAL
Попытка сделать каталог своим собственным подкаталогом.
EMLINK
oldpath уже имеет максимальное количество ссылок на него, или это был каталог, а каталог, содержащий newpath, уже имеет максимальное количество ссылок.
ENOTDIR
Компонент, используемый как каталог в oldpath или newpath в действительности не является каталогом.
EFAULT
oldpath или newpath указывают за пределы доступного адресного пространства.
EACCES
Запись в каталог, содержащий oldpath или newpath не разрешена для эффективного uid'а процесса, или один из каталогов в oldpath или newpath не позволяет производить поиск (выполнять), или oldpath был каталогом и не позволял запись в него (необходимую, чтобы обновить ..).
EPERM
Каталог, содержащий oldpath, имеет sticky-bit, а эффективный uid процесса не равен ни uid'у файла, который нужно удалить, ни uid'у каталога, который его содержит, или файловая система, содержащая pathname, не поддерживает переименование запрошенного типа.
ENAMETOOLONG
oldpath или newpath слишком длинны.
ENOENT
Одна из частей каталога в oldpath или newpath не существует или является "висячей" символической ссылкой.
ENOMEM
Ядру не хватило памяти.
EROFS
Файл находится на файловой системе, смонтированной только для чтения.
ELOOP
oldpath или newpath содержат зацикленную символическую ссылку, то есть при ее подстановке происходит ссылка на нее саму.
ENOSPC
На устройстве, содержащем файл, нет места для новой записи в каталоге.

СООТВЕТСТВУЕТ

POSIX, 4.3BSD, ANSI C

ОШИБКИ

На файловых системах NFS вы не можете исходить из предположения, что если операция завершилась неудачно, то файл остался не переименованным. Если сервер совершает операцию rename, а затем аварийно останавливается, то перепосланный пакет RPC будет опять обработан, когда сервер восстановит работу, и это вызовет ошибку. Приложение должно справиться с этой ситуацией. См. link(2) за описанием подобной проблемы.

СМОТРИ ТАКЖЕ

link(2), unlink(2), symlink(2), mv(1), link(8).

ПЕРЕВОД

Copyright (C) Alexey Mahotkin <alexm@hsys.msk.ru> 1999-2000