rename

rename(2)                       2007-10-27-16:31                       rename(2)



Назва
       rename - змінює назву і місцеположення файлу


Огляд
       #include <stdio.h>

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


Опис
       rename міняє назву файлу, переміщуючи його між директоріями, якщо
       необхідно.

       Будь-які інші жорсткі посилання на файл (створених, наприклад, link(2))
       залишаються незмінними.

       Якщо newpath вже існує, його буде автоматично замінено (за кількома
       умовами - дивіться ПОМИЛКИ нижче), тож не буде такого моменту, коли
       якийсь процес, що намагається отримати доступ до файлу, не знайде його.

       Якщо newpath існує, але операція з якоїсь причини зазнає невдачі, rename
       гарантує залишити один взірець newpath на місці.

       Не зважаючи на це, під час перезапису може виявитись момент у якому
       oldpath і newpath, обидва, посилатумуться на файл, чия назва змінюється.

       Якщо oldpath вказує на символічне посилання, останнє змінить назву; якщо
       newpath вказує на символічне посилання, його буде перезаписано.


Повернені значення
       При вдалому виконанні повертається нуль, при помилці повертається -1 і
       змінна errno набуде відповідного значення.


Помилки
       EISDIR newpath - це вже існуючий каталог, але oldpath не є каталогом.


       EXDEV
               newpath і oldpath не знаходяться на тій самій файловій системі.


       ENOTEMPTY або EEXIST
               newpath - це непорожній каталог, томбто містить об'єкти окрім "."
              або "..".


       EBUSY
               rename зазнав невдачі, оскільки oldpath або newpath є каталогом,
              використовуваним якомось процесом (напевне, як поточна робоча
              директорія, кореневий каталог або сиректорію відкрито для читання)
              або використовується системою (наприклад, як пункт приєднання
              інших файлових систем). Система вважає це помилкою. (Зауважте, що
              не вимагається повернення EBUSY в таких випадках - нічого не
              забороняє виконувати rename, EBUSY лише дозволяється повернути у
              випадках, якщо система не в змозі опрацювати такі ситуації.


       EINVAL
               Нова назва шляху, pathname, містить префікс шляху старої, або,
              більш узагальнено, відбулася спроба створення каталогу, як
              підкаталог самого себе.


       EMLINK
               oldpath вже має максимально-дозволене число посилань на себе, або
              це був каталог і каталог, що містить newpath має
              максимально-дозволене число посилань.


       ENOTDIR
               Складова, що була використана як назва каталогу для oldpath або
              newpath, насправді, не є такою. Або oldpath є каталогом, а newpath
              вже існує, але не як каталог.


       EFAULT
               oldpath або newpath вказують поза межі доступного простору адрес.


       EACCES
               Немає дозволу на запис каталогу, де міститься oldpath або newpath
              для дійсного UID процесу, або в одному з каталогів з oldpath або
              newpath не дозволяється пошук (не встановлений дозвіл на
              виконання), або oldpath - це каталог, в якому заборонено запис
              (необхідний для поновлення компоненти "..").


       EPERM або EACCES
               Каталог, що містить oldpath має встановленим стійкий біт і UID
              процесу не дорівнює ні ідентифікаційному номеру надкористувача ні
              UID файлу видалення, ні UID каталогу, де міститься oldpath, або
              newpath вже існує і каталог, де він міститься має встановленим
              стійкий біт з і UID процесу не дорівнює ні ідентифікаційному
              номеру надкористувача ні UID файлу до заміни, ні UID каталогу, де
              міститься newpath, або файлова система не підтримує зміни назв
              вказаного типу.


       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)






© 2005-2007 DLOU, GNU FDL       2007-10-27-16:31                       rename(2)