UNLINK(2) | Руководство программиста Linux | UNLINK(2) |
unlink, unlinkat - удаляет имя и, возможно, файл, на который оно ссылается
#include <unistd.h>
int unlink(const char *pathname); #include <fcntl.h> /* определения констант of AT_* */ #include <unistd.h>
int unlinkat(int dirfd, const char *pathname, int flags);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
unlinkat():
unlink() удаляет имя из файловой системы. Если это имя было последней ссылкой на файл и больше нет процессов, которые держат этот файл открытым, данный файл удаляется и место, которое он занимает, освобождается для дальнейшего использования.
Если имя было последней ссылкой на файл, но какие-либо процессы всё ещё держат этот файл открытым, файл будет оставлен, пока последний файловый дескриптор, указывающий на него, не будет закрыт.
Если имя указывает на символьную ссылку, то будет удалена ссылка.
Если имя указывает на сокет, FIFO или устройство, то имя будет удалено, но процессы, которые открыли любой из этих объектов могут продолжать его использовать.
Системный вызов unlinkat() работает также как unlink() или rmdir(2) (в зависимости от того, есть ли флаг AT_REMOVEDIR во flags), за исключением случаев, описанных здесь.
Если в pathname задан относительный путь, то он считается относительно каталога, на который ссылается файловый дескриптор dirfd (а не относительно текущего рабочего каталога вызывающего процесса, как это делается в unlink() и rmdir(2)).
Если в pathname задан относительный путь и dirfd равно специальному значению AT_FDCWD, то pathname рассматривается относительно текущего рабочего каталога вызывающего процесса (как unlink() и rmdir(2)).
Если в pathname задан абсолютный путь, то dirfd игнорируется.
Аргумент flags представляет собой битовую маску, значение которой может быть 0, или объединённым значением флагов с помощью OR, определяющих операцию unlinkat(). В настоящее время определён только один флаг:
Смотрите в openat(2) объяснение необходимости unlinkat().
При успешном выполнении возвращается 0. В случае ошибки возвращается -1, а errno устанавливается в соответствующее значение.
В unlinkat() могут возникнуть те же ошибки, что и в unlink() и rmdir(2). Также, в unlinkat() могут возникнуть следующие ошибки:
Системный вызов unlinkat() был добавлен в ядро Linux версии 2.6.16; поддержка в glibc доступна с версии 2.4.
unlink(): SVr4, 4.3BSD, POSIX.1-2001, POSIX.1-2008.
unlinkat(): POSIX.1-2008.
В старых ядрах, где unlinkat() отсутствует, обёрточная функция glibc использует unlink(2) или rmdir(2). Если pathname является относительным путём, то glibc собирает путь относительно символической ссылки в /proc/self/fd, которая соответствует аргументу dirfd.
Неточности в протоколе NFS могут приводить к неожиданному исчезновению файлов, которые всё ещё используются.
rm(1), unlink(1), chmod(2), link(2), mknod(2), open(2), rename(2), rmdir(2), mkfifo(3), remove(3), path_resolution(7), symlink(7)
2017-09-15 | Linux |