Переименование файла

#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 принадлежат разным файловым системам.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: