#include <unistd.h>
int unlink(const char *pathname);
Этот системный вызов удаляет имя файла. При этом анализируется число жестких ссылок, которые имеются у файла, и если это была последней ссылкой на файл, то файл удаляется сам. Если при этом удаляется последняя ссылка, с которой работают, то удаление произойдет только после завершения работы. Если же это символическая ссылка, то удаляется только ссылка, а файл не разрушается.
В случае ошибки вызов возвращает -1 и присваивает переменной errno одно из следующих значений:
EACCESS – у вызывающего процесса нет разрешения на запись в родительский каталог файла pathname или у вызывающего процесса нет разрешения на поиск для компонента пути pathname.
EFAULT – параметр pathname содержит недопустимый указатель.
ЕIO – произошла ошибка ввода-вывода.
EISDIR – путь pathname ссылается на каталог.
ELOOP – при прохождении pathname встретилось слишком много символических ссылок.
ENAMETOOLONG – слишком длинное значение pathname.
ENOENT – компонент пути pathname не существует.
ENOMEM – недостаточно памяти для выполнения данного запроса.
|
|
ENOTDIR – компонент пути pathname не является каталогом.
EPERM – система не позволяет отсоединять файлы.
EROFS – путь pathname принадлежит файловой системе, доступной только для чтения.
Системный вызов unlink() не поддерживает удаление каталогов. Для этого в приложениях следует использовать вызов rmdir(). Для упрощения бессмысленного разрушения файлов любого типа в языке С предусмотрена функция remove():
#include <stdio.h>
int remove(const char *path);
Успешный вызов remove() удаляет файл path из файловой системы и возвращает значение 0. Если path — это файл, то remove() вызывает unlink(); если path — это каталог, то remove() вызывает rmdir().
В случае ошибки remove() возвращает -1 и присваивает переменной errno один из допустимых кодов ошибки, определенных для unlink() и rmdir() соответственно.