gpt4 book ai didi

c - 硬链接(hard link)与其在 C 中的程序之间的区别

转载 作者:太空宇宙 更新时间:2023-11-04 08:57:51 25 4
gpt4 key购买 nike

我正在编写一个程序,它的功能类似于 Linux 上的磁盘使用实用程序,但在硬链接(hard link)方面我遇到了麻烦。

我目前正在运行程序,它判断一个程序是否有硬链接(hard link)。我在文件上使用 stat() 来确定这一点。

if (st.st_nlink > 1)

当我运行它时,链接和它所链接的程序都会返回,但磁盘使用实用程序只会报告程序而不是它的硬链接(hard link)。

如何使用 C 在 Linux 中区分程序及其硬链接(hard link)?

最佳答案

首先,为什么您以不同方式处理具有多个硬链接(hard link)的程序数据 文件?

然后,重要的不是名称或它们的编号(注意硬链接(hard link)向文件添加另一个名称),而是 inode .对于具有多个硬链接(hard link)的"file"(即 inode),所有指向同一 inode 的名称都具有同等权利(没有“主”名称,所有指向同一 inode 的名称都是等价的)。

所以在调用 stat(2) 之后你想同时使用 st_dev 的系统调用和 st_ino领域。它们一起唯一标识一个文件,即它的 inode。

因此,对于带有 st.st_nlink>1 的文件您可能会将 ( st_dev , st_ino ) 对添加到某个哈希表或集合容器中。

在 C++ 中,您甚至可以使用一些 std::set<std::pair<dev_t,ino_t> >但是在 C 中你必须制作这样一个容器。

注意:一个文件(例如一些 inode)甚至可以有零个名字(例如,如果在 unlink(2) 之后调用了一个 open(2) 系统调用),临时文件就是这样产生的。

关于c - 硬链接(hard link)与其在 C 中的程序之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16072883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com