C中硬链接及其程序的区别

时间:2013-04-18 01:12:09

标签: c linux filesystems diskspace hardlink

我正在编写一个与Linux上的磁盘使用实用程序类似的程序,而且在硬链接方面我遇到了麻烦。

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

if (st.st_nlink > 1)

当我运行它时,链接和链接的程序都返回,但磁盘使用实用程序只报告程序而不报告其硬链接。

如何使用C?

来说明Linux中的程序与其硬链接之间的区别?

1 个答案:

答案 0 :(得分:2)

首先,为什么要使用多个硬链接处理不同的程序数据文件?

然后,重要的不是名称或号码(注意硬链接为文件添加另一个名称),而是inode。对于具有多个硬链接的“文件”(即inode),指向同一inode的所有名称具有相同的权限(没有“主”名称,指向同一inode的所有名称都是等效的。) / p>

因此,在调用stat(2)系统调用后,您要同时使用st_devst_ino字段。它们一起唯一地标识一个文件,即它的inode。

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

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

注意:文件(例如某些inode)甚至可能没有名称(例如,如果在unlink(2)之后调用open(2)系统调用),这就是临时文件的制作方式。