任何 POSIX 函数或 glibc 扩展实现广度优先的文件树遍历吗?

3
我正在编写一个守护进程,利用inotify监视文件访问,对于递归搜索不可错过任何内容至关重要。我发现了这个有趣的想法并已经开始实施。
ftw()和ftw64()不使用广度优先算法,而是更像“前序”。nftw()让我可以选择深度优先,但我担心在上层节点中会出现竞争。
我希望我漏掉了什么,也许是GNU扩展?还是我只是在考虑自己使用类型安全回调来实现(我真的不想这样做)?
或者,我对广度优先相对于深度优先的优势在这种类型的应用程序中的理解是错误的吗?

1
你可能不再需要这个了,但我实现了nftw(3)的广度优先变体:https://github.com/tavianator/bfs/blob/master/bftw.c - Tavian Barnes
@TavianBarnes 看起来非常不错且自包含,也许考虑将其发送到 CCAN?在这种特定情况下,我只是绕过了深度优先行为的限制,现在我要重新审查一下那段代码 :) - Tim Post
哦,TIL 关于 CCAN。我会考虑在做一些更改和编写一些测试后上传它 :) - Tavian Barnes
1个回答

1

查看 'nftw()' 的规范,FTW_DEPTH标志执行后序(深度优先)遍历,在访问目录节点之前访问子目录。

我认为标准算法中没有任何广度优先搜索。

假定你应该基于nftw()接口编写一个bfftw()。请注意,在扫描时必须递归地将要访问的项(目录)排队。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接