Программирование в стандарте POSIX


Создание, удаление, копирование и перемещение файлов - часть 5


Опишем опции утилиты rm. Опция -i означает удаление файлов с предварительным запросом подтверждения.

Опция -f предписывает не запрашивать подтверждений и не выдавать диагностических сообщений, если удаляемый файл не существует. Опция полезна, когда нет уверенности в существовании удаляемого файла и его отсутствие не является ошибкой.

Для удаления файла желательно иметь право на запись в него (обязательным является наличие права на запись в каталог, содержащий удаляемую ссылку). Если такого права нет, то утилита rm   запрашивает подтверждение.

В общем случае подтверждение на удаление запрашивается при выполнении следующего условия:

  • (не задана опция -f) И
  • (((отсутствует право на запись в файл) И
  • (стандартный ввод назначен на терминал)) ИЛИ
  • (задана опция -i)))

Наконец, две эквивалентные "сверхмощные" опции -R и -r (первая предусмотрена стандартом POSIX, вторая поддерживается по историческим причинам) позволяют удалять каталоги со всем их содержимым (если, конечно, хватает прав). Так, в процессе загрузки некоторых Unix-систем выполняется команда, которая удаляет каталог   /tmp и все содержащиеся в нем файлы и подкаталоги:

rm -rf /tmp

Разумеется, пользоваться опцией -R следует крайне осторожно, но без нее удалить каталог с помощью утилиты rm невозможно (по умолчанию удаляемый файл не может быть каталогом). Отметим также, что rm удаляет символьные ссылки, а не указуемые файлы.

Для удаления каталогов (правда, только пустых) рекомендуется использовать служебную программу rmdir (или одноименную функцию). Опция -p предписывает удалять всю цепочку каталогов, составляющих заданное маршрутное имя. Например, если в текущем каталоге есть подкаталог a, содержащий только пустой подкаталог b, то команда, показанная в пример 4.41, удалит и b, и a.

rm -p a/b

Листинг 4.41. Пример команды удаления цепочки каталогов.

Функция unlink() предназначена для удаления файлов, не являющихся каталогами, а функция remove(), имеющая в стандарте C99 [5], объединяет возможности функций rmdir() и unlink().




Начало  Назад  Вперед



Книжный магазин