c - 如何在文件系统中找到循环?

标签 c linux

如何在 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/

相关文章:

linux - 模拟有读取错误的故障 block 设备?

C -- 结构体和指针基础题

找不到 C 中 malloc() 和 calloc() 之间的区别(从虚拟机 Linux 运行)

C交叉编译: sprintf only writes "\0" character after array of size [512][4] number [111][1] is initialized to 0

linux - 本地 Ubuntu 服务器上的 URL 重写不起作用

python - 错误: [Errno 13] Permission denied: './configure' when use pip3 install matplotlib on termux

linux - Windows 7 上的 X 服务器

c - 为什么(带符号的)强制转换有时只需要表示最小整数(32 位系统)?

创建将当前时间打印到命令行的 pthread

linux - 从进程 (Nagios) 调用时,Perl 脚本无法打开 root 拥有的文件