为了解释清楚这两个函数,首先必须要有清楚 目录项 和 inode节点 两个概念。目录文件中存放的是文件名和对应的inode号码,统称为目录项。link和unlink函数分别是用来创建硬链接和删除硬链接的。两个函数中的操作都是原子操作。
======================================================
函数原型:
函数参数:
- oldpath:源文件路径名
- newpath:新文件路径名
返回值:
- 当oldpath不存在或者newpath存在时调用失败返回 -1
- 调用成功返回 0
======================================================
函数原型:
函数参数:
- pathname:删除的文件名
返回值:
- 调用成功时返回 0
- 调用失败时返回 -1
======================================================
我们知道Linux中文件是用inode节点来区分文件的,当我们删除一个文件的时候并不一定系统就会释放inode节点的内容。当满足下面的要求的时候系统才会释放inode节点的内容
- inode中记录指向该节点的硬链接数为0
- 没有进程打开指向该节点的文件
使用unlink函数删除文件的时候,只会删除 目录项 ,并且将inode节点的硬链接数目减一而已,并不一定会释放inode节点。
如果此时没有进程正在打开该文件或者有其他文件指向该inode节点,该inode节点将会被释放;如果此时有进程正在打开一个文件,而此时使用unlink删除了该文件,那么此时只是删除了目录项,并没有释放,因为此时仍然有进程在打开这个文件
========================================================
unlink函数的另一个用途就是用来创建临时文件,如果在程序中使用open创建了一个文件后,然后立即使用 unlink 函数删除文件,由于此时进程正在打开该文件,所以系统并不会释放该文件的 inode 节点,而只是删除其目录项。当进程退出时,该inode节点将会立即被释放。
临时文件可以用在进程间通信中的 有名管道 通信中。