两个硬链接是否连接到Linux中的一个文件?

时间:2010-12-05 21:28:38

标签: c linux unix

  

可能重复:
  How to check whether two file names point to the same physical file

如何知道两个硬链接是否从Linux中的C连接到一个文件。

感谢。

4 个答案:

答案 0 :(得分:7)

对两个路径使用stat() or fstat()功能。如果在返回的结构中st_dev和st_ino字段都相同,则路径引用相同的文件系统对象。

编辑:

请注意您需要同时检查st_dev和st_ino 。否则,您可能会遇到恰好具有相同inode编号的不同文件系统中的两个文件匹配的风险。如果您在两个挂载点上运行stat,则可能会看到此内容:

$ stat / /boot | grep Device
Device: 903h/2307d  Inode: 2           Links: 23
Device: 902h/2306d  Inode: 2           Links: 3

您可以在输出中清楚地看到相同的inode编号。

答案 1 :(得分:3)

使用statfstat。他们填写的stat结构包含inode编号。如果两者都已连接,则st_ino字段应具有相同的值。

由于inode编号仅对设备而言是唯一的,因此您还需要检查设备ID(st_dev)。

答案 2 :(得分:2)

stat()fstat()函数将返回一个包含st_nlink字段的结构,该字段指出存在该文件的硬链接数。我想你可以比较两个不同路径的inode,因为硬链接应该重用相同的inode。

答案 3 :(得分:0)

您也可以使用

$ ls -i

它列出了inode编号,它是文件的唯一ID。