我正在编写一个与Linux上的磁盘使用实用程序类似的程序,而且在硬链接方面我遇到了麻烦。
我目前正在运行程序,它确定程序是否有硬链接。我在文件上使用stat()来确定这一点。
if (st.st_nlink > 1)
当我运行它时,链接和链接的程序都返回,但磁盘使用实用程序只报告程序而不报告其硬链接。
如何使用C?
来说明Linux中的程序与其硬链接之间的区别?答案 0 :(得分:2)
首先,为什么要使用多个硬链接处理不同的程序和数据文件?
然后,重要的不是名称或号码(注意硬链接为文件添加另一个名称),而是inode。对于具有多个硬链接的“文件”(即inode),指向同一inode的所有名称具有相同的权限(没有“主”名称,指向同一inode的所有名称都是等效的。) / p>
因此,在调用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)
系统调用),这就是临时文件的制作方式。