列出文件C的硬链接

时间:2015-01-25 02:42:53

标签: c unix hardlink

我需要在" pure"中列出给定文件的所有硬链接。 C,所以没有bash命令的帮助。

我用谷歌搜索了好几个小时但却找不到任何有用的东西。 我目前的想法是获取inode号然后循环遍历目录以查找具有相同inode的文件。

用bash之类的东西

 sudo find / -inum 199053

有什么更好的建议吗?

由于

1 个答案:

答案 0 :(得分:2)

要获取单个文件的inode编号,请调用stat函数并引用返回的struct的st_ino值。

int result;
struct stat s;
result = stat("filename.txt", &s);
if ((result == 0) && (s.st_ino == 199053))
{
   // match
}

您可以使用opendirreaddirclosedir使用stat函数构建解决方案,以递归方式扫描目录层次结构以查找匹配的inode值。

您还可以使用scandir扫描整个目录:

int filter(const struct dirent* entry)
{
    return (entry->d_ino == 199053) ? 1 : 0;
}

int main()
{ 
    struct dirent **namelist = NULL;
    scandir("/home/selbie", &namelist, filter, NULL);
    free(namelist);
    return 0;
}