首页 > 代码库 > 文件和目录详解(六)---link和unlink函数详解

文件和目录详解(六)---link和unlink函数详解

  为了解释清楚这两个函数,首先必须要有清楚 目录项 和 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节点将会立即被释放。
临时文件可以用在进程间通信中的 有名管道 通信中。

文件和目录详解(六)---link和unlink函数详解