#include <stdio.h>
int rename(const char *oldpath, const char *newpath);
В этом случае вместо существующего ранее файла создается новое имя файла, ничего другого не меняется. Но POSIX стандартизировал его и для файлов и, и для каталогов.
Следует помнить, что при переименовании файла те изменения, которые были произведены в файле, отображаются во всех файлах, а при копировании, если это было сделано так: открыты два файла, скопирована информация из одного файла и перенесена во второй, закрыты эти файлы, изменения отображаются только в данном файле.
В случае успеха системный вызов rename() возвращает значение 0, а к файлу, на который раньше указывал путь oldpath, после этого можно обращаться только при помощи пути newpath. В случае ошибки вызов возвращает -1, не меняет oldpath и newpath и присваивает переменной errno одно из следующих значений:
EACCESS – у вызывающего процесса нет разрешения на запись в родительский каталог файла oldpath или newpath, разрешения на поиск для компонента пути oldpath или newpath или разрешения на запись для oldpath, если oldpath — это каталог. Последний случай может быть проблемой, так как вызову rename() приходится обновлять каталог, когда oldpath является каталогом.
|
|
EBUSY – oldpath или newpath — это точка монтирования.
EFAULT – параметр cldpath или newpath содержит недопустимый указатель.
EINVAL – путь newpath является составляющей oldpath и, таким образом, переименование одного в другой сделает oldpath подкаталогом самого себя.
EISDIR – путь newpath существует и является каталогом, но oldpath — не каталог.
ELOOP – при разрешении пути oldpath или newpath встретилось слишком много символических ссылок.
EMLINK – на oldpath уже указывает максимальное число ссылок, или oldpath — это каталог, а на newpath уже указывает максимальное число ссылок.
ENAMETOOLONG – слишком длинное значение oldpath или newpath.
ENOENT – компонент oldpath или newpath не существует или является повисшей символической ссылкой.
ENOMEM – недостаточно памяти ядра для выполнения данного запроса.
ENOSPC – недостаточно пространства на устройстве для выполнения данного запроса.
ENOTDIR – компонент (за исключением потенциально последнего компонента) oldpath или newpath не является каталогом или oldpath — это каталог, a newpath существует и не является каталогом.
ENOTEMPTY – newpath — это каталог и он не пуст.
EPERM – по крайней мере, один из указанных в аргументах путей существует, для родительского каталога установлен бит закрепления в памяти, действительный идентификатор пользователя вызывающего процесса не совпадает ни с идентификатором пользователя файла, ни с идентификатором пользователя его предка, и процесс не привилегированный.
EROFS – файловая система помечена как доступная только для чтения.
EXDEV – oldpath и newpath принадлежат разным файловым системам.