我必须写出C中存档的所有硬链接。我不知道该怎么做。 一种可能性是调用bash命令,但调用哪个命令?
鉴于:文件名' foo.txt'
查找:所有与' foo.txt'
的硬链接的文件答案 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);
}