如何在 Linux 中找到文件系统中的循环?我正在为所有文件编制索引以加快搜索速度(O(1))...我正在使用 c 编程语言通过使用 dir.h 中的库函数来实现...我可以扫描整个文件系统但它会进入如果文件系统中存在循环(示例循环挂载),则为循环...如何在文件系统中找到循环...我已经看到 updatedb 命令在文件系统中存在循环时报告...我不明白其中的逻辑...任何人都可以帮助找到解决方案吗?
最佳答案
防止重新扫描图中节点的一般方法是在传递节点时标记节点,然后忽略标记的节点。如果您不想修改正在扫描的图形,这不是很实用,因此您需要一种在外部标记节点的方法。我能想到的在 linux 下执行此操作的最简单方法是为您访问的每个目录存储一个设备/inode。然后,当您查看目录时,首先检查您是否还没有看到任何具有相同设备/inode 的目录。这不仅可以处理循环,还可以处理相互合并的树。
要获取设备/inode 编号,请查看 stat/fstat 函数以及 stat 结构的 st_dev 和 st_ino 成员。
为了存储数据,您可能想要查看 hash-table或二叉树。
关于c - 如何在文件系统中找到循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/671490/