rename - изменяет имя или расположение файла
НАЗВАНИЕrename - изменяет имя или расположение файла
СИНТАКСИС
#include
int rename(const char *oldpath, const char *newpath);
ОПИСАНИЕ
rename переименовывает файл и, если требуется, перемещает
его из одного каталога в другой. Все прочие "жесткие"
ссылки на файл (созданные с помощью link(2)), не
изменяются. Если newpath уже существует, то он будет
вновь записан (при определенных условиях, см. ОШИБКИ
ниже), так что неизвестны условия, при которых другой
процесс, пытающийся обратиться к newpath, не обнаружит
его. Если newpath существует, но операция завершается
ошибкой или система аварийно завершает работу, rename
гарантирует, что newpath останется нетронутым. При
повторной записи, однако, есть вероятность, что oldpath и
newpath будут ссылаться на один и тот же файл. Если old-
path является символьной ссылкой, то она
переименовывается; если 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 не
позволяет производить поиск (выполнение), или old-
path был каталогом и не позволял запись в него
информации для обновления ..).
EPERM Каталог, содержащий oldpath, имеет sticky-бит, а
эффективный 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), где
описывается подобная проблема.