在文件上打印硬链接

时间:2014-05-30 12:08:14

标签: c linux hardlink

我必须写出C中存档的所有硬链接。我不知道该怎么做。 一种可能性是调用bash命令,但调用哪个命令?

鉴于:文件名' foo.txt'

查找:所有与' foo.txt'

的硬链接的文件

2 个答案:

答案 0 :(得分:2)

获取文件的inode编号(ls -i将提供),然后使用find root_path_of_the_partition -inum inode_number。 请注意在同一分区上找到inode编号,因为两个不同的文件可能具有相同的inode编号,前提是它们位于不同的分区上。

答案 1 :(得分:1)

另一个答案显然依赖于ls命令,但这可以在没有它的情况下完成。使用lstat将文件(inode)信息放入struct stat。例如:

#include <sys/stat.h>
// ... inside main ...
struct stat stats;
if (argc == 2)
  lstat(argv[1], &stats)
printf("Link count: %d\n", stats->st_nlink);

在继续操作之前,您还应该检查lstat是否失败(if (lstat(argv[1], &stats) != 0) {...})。只是给你一个起点。


添加更多代码,以防您想要查找与目录中所有文件相关的链接,而不只是一个文件作为参数。

DIR *dp; 
struct stat stats;
// ...
if ((dp = opendir(".")) == NULL) {
    perror("Failed to open directory");
    exit(-1);
}

while ((dir = readdir(dp)) != NULL) {
    if (lstat(dir->d_name, &stats) != 0) {
        perror("lstat failed: ");
        exit(-1);
    }

    printf("Link count: %d\n, stats->st_nlink);
}