unlink(2) - Linux 手册页

名称

unlink - 删除一个名称以及它所指向的文件(如果存在)

概要

#include <unistd.h>

int unlink(const char *pathname);

描述

unlink() 从文件系统中删除一个名称。如果该名称是文件的最后一个链接,并且没有进程打开该文件,则该文件将被删除,并且它所使用的空间将被释放以供重用。

如果该名称是文件的最后一个链接,但任何进程仍然打开该文件,则该文件将继续存在,直到引用它的最后一个文件描述符被关闭。

如果该名称指向一个符号链接,则该链接将被删除。

如果该名称指向一个 socket、fifo 或设备,则该名称将被删除,但仍然打开该对象的进程可以继续使用它。

返回值

成功时返回零。出错时返回 -1,并相应地设置 errno

错误

EACCES
进程的有效 UID 没有对包含 pathname 的目录的写入权限,或者 pathname 中的某个目录不允许搜索权限。(请参阅 path_resolution(7)。)
EBUSY
由于该文件正被系统或另一个进程使用,因此无法取消链接该文件 pathname;例如,它是一个挂载点,或者 NFS 客户端软件创建它来表示一个活动但否则没有名称的 inode(“NFS silly renamed”)。
EFAULT
pathname 指向可访问地址空间之外。
EIO
发生了 I/O 错误。
EISDIR
pathname 指向一个目录。(这是 Linux 从 2.1.132 版本以来返回的非 POSIX 值。)
ELOOP
在转换 pathname 时遇到了过多的符号链接。
ENAMETOOLONG
pathname 太长。
ENOENT
pathname 中的一个组件不存在或是一个断开的符号链接,或者 pathname 为空。
ENOMEM
内核内存不足。
ENOTDIR
用作 pathname 中目录的组件实际上不是一个目录。
EPERM
系统不允许取消链接目录,或者取消链接目录需要调用进程没有权限。(这是 POSIX 规定的错误返回值;如上所述,Linux 在这种情况下返回 EISDIR。)
EPERM (仅限 Linux)
文件系统不允许取消链接文件。
EPERMEACCES
包含 pathname 的目录设置了粘滞位 (S_ISVTX),并且进程的有效 UID 既不是要删除文件的 UID,也不是包含该文件的目录的 UID,并且进程没有特权(Linux:没有 CAP_FOWNER 功能)。
EROFS
pathname 指向只读文件系统上的文件。

符合

SVr4, 4.3BSD, POSIX.1-2001。

错误

NFS 底层协议中的不足可能导致仍然正在使用的文件意外消失。

参见

rm(1), chmod(2), link(2), mknod(2), open(2), rename(2), rmdir(2), unlinkat(2), mkfifo(3), remove(3), path_resolution(7), symlink(7)

引用自

bind(2), close(2), explain(1), explain(3), explain_lca2010(1), explain_unlink(3), explain_unlink_or_die(3), fastrm(1), getcwd(2), lam_rfposix(2), lsof(8), mkdir(2), nfslogsum(8), pidfile(3), rpc_soc(3), shm_open(3), star(1), symlink(2), unix(7), unlink(1), zshmodules(1)