Книга: Разработка приложений в среде Linux. Второе издание
11.4.5. Переименование файлов
11.4.5. Переименование файлов
Имя файла может быть изменено на любое другое до тех пор, пока оба имени относятся к одному и тому же физическому носителю (это то же ограничение, что и касается создания жестких ссылок). Если новое имя уже ссылается на файл, то такое имя разъединяется перед тем, как произойдет переименование. Атомарность системного вызова rename()
гарантируется. Другие процессы в системе всегда видят существование файла под тем или иным именем, но не под обеими сразу. Поскольку открытые файлы не связаны с именами (а только с inode), то переименование файла, который открыт в других процессах, никак не влияет на их работу. Ниже показано, как выглядит системный вызов для переименования файлов.
#include <unistd.h>
int rename(const char *oldpath, const char *newpath);
После вызова файл, на который ссылалось имя oldpath
, получает ссылку newpath
вместо oldpath
.