头文件:#include <unistd.h>
定义函数:int unlink(const char * pathname);
函数说明:unlink()会删除参数pathname 指定的文件. 如果该文件名为最后连接点, 但有其他进程打开了此文件, 则在所有关于此文件的文件描述词皆关闭后才会删除. 如果参数pathname 为一符号连接, 则此连接会被删除。
返回值:成功则返回0, 失败返回-1, 错误原因存于errno
错误代码:
1、EROFS 文件存在于只读文件系统内。
2、EFAULT 参数pathname 指针超出可存取内存空间。
3、ENAMETOOLONG 参数pathname 太长。
4、ENOMEM 核心内存不足。
5、ELOOP 参数pathname 有过多符号连接问题。
6、EIO I/O 存取错误。
我们知道Linux中文件是用inode节点来区分文件的,当我们删除一个文件的时候并不一定系统就会释放inode节点的内容。当满足下面的要求的时候系统才会释放inode节点的内容
- inode中记录指向该节点的硬链接数为0
- 没有进程打开指向该节点的文件
使用unlink函数删除文件的时候,只会删除 目录项 ,并且将inode节点的硬链接数目减一而已,并不一定会释放inode节点。
如果此时没有进程正在打开该文件或者有其他文件指向该inode节点,该inode节点将会被释放;如果此时有进程正在打开一个文件,而此时使用unlink删除了该文件,那么此时只是删除了目录项,并没有释放,因为此时仍然有进程在打开这个文件
========================================================
unlink函数的另一个用途就是用来创建临时文件,如果在程序中使用open创建了一个文件后,然后立即使用 unlink 函数删除文件,由于此时进程正在打开该文件,所以系统并不会释放该文件的 inode 节点,而只是删除其目录项。当进程退出时,该inode节点将会立即被释放。
临时文件可以用在进程间通信中的 有名管道 通信中