unlink(2) - Linux 手册页
名称
unlink - 删除一个名称以及它所指向的文件(如果存在)概要
#include <unistd.h>int unlink(const char *pathname);
描述
如果该名称是文件的最后一个链接,但任何进程仍然打开该文件,则该文件将继续存在,直到引用它的最后一个文件描述符被关闭。
如果该名称指向一个符号链接,则该链接将被删除。
如果该名称指向一个 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)
- 文件系统不允许取消链接文件。
- EPERM 或 EACCES
- 包含 pathname 的目录设置了粘滞位 (S_ISVTX),并且进程的有效 UID 既不是要删除文件的 UID,也不是包含该文件的目录的 UID,并且进程没有特权(Linux:没有 CAP_FOWNER 功能)。
- EROFS
- pathname 指向只读文件系统上的文件。