【发布时间】:2010-12-05 21:28:38
【问题描述】:
可能重复:
How to check whether two file names point to the same physical file
我如何知道两个硬链接是否从 Linux 中的 C 连接到一个文件。
谢谢。
【问题讨论】:
可能重复:
How to check whether two file names point to the same physical file
我如何知道两个硬链接是否从 Linux 中的 C 连接到一个文件。
谢谢。
【问题讨论】:
对两个路径都使用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 编号。
【讨论】:
使用stat 或fstat。他们填写的stat 结构包含inode 编号。如果两者相连,st_ino 字段应该具有相同的值。
由于 inode 编号仅对设备是唯一的,因此您还需要检查设备 ID (st_dev)。
【讨论】:
stat() 或fstat() 函数将返回一个包含st_nlink 字段的结构,该字段说明存在多少个指向该文件的硬链接。我想你可以比较两个不同路径的 inode,因为硬链接应该重用相同的 inode。
【讨论】:
你也可以使用
$ ls -i
它列出了 inode 编号,这是文件的明确唯一 ID。
【讨论】: