【问题标题】:Are two hardlinks connected to one file in Linux? [duplicate]Linux 中是否有两个硬链接连接到一个文件? [复制]
【发布时间】:2010-12-05 21:28:38
【问题描述】:

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

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

谢谢。

【问题讨论】:

    标签: c linux unix


    【解决方案1】:

    对两个路径都使用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 编号。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • inode 编号仅在一台设备上是唯一的。您还需要检查@thkala 概述的设备
      • @camh 谢谢,现在修好了。
      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        你也可以使用

        $ ls -i
        

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

        【讨论】:

          猜你喜欢
          • 2012-11-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-07-13
          • 2015-11-13
          • 2017-02-23
          • 1970-01-01
          相关资源
          最近更新 更多