是否有任何 POSIX 函数或 glibc 扩展实现了广度优先文件树遍历?
Posted
技术标签:
【中文标题】是否有任何 POSIX 函数或 glibc 扩展实现了广度优先文件树遍历?【英文标题】:Do any POSIX functions or glibc extensions implement a breadth-first file tree walk? 【发布时间】:2009-10-30 01:36:17 【问题描述】:我正在编写一个使用 inotify 来监视文件访问的守护程序,并且在递归搜索中不会遗漏任何内容是至关重要的。找到了this interesting idea,已经开始实现了。
ftw() 和 ftw64() 不使用广度优先算法,它更多的是“预购”。 nftw() 给了我深度优先的选项,但我担心上层叶子的种族。
我希望我遗漏了一些东西,也许是 GNU 扩展?还是我只是想用类型安全的回调实现我自己的(我真的不想这样做)?
或者,对于这种类型的应用程序,我对广度优先优于深度优先的优势的理解是否错误?
【问题讨论】:
你可能不再需要这个,但我实现了 nftw(3) 的广度优先变体:github.com/tavianator/bfs/blob/master/bftw.c @TavianBarnes 这看起来相当不错而且非常独立,也许考虑将它发送到CCAN?在这个特定的例子中,我只是将深度优先行为作为一种限制,我现在要重新访问该代码:) 嗯,关于 CCAN。我会考虑在进行一些更改并编写一些测试后上传它:) 【参考方案1】:查看“nftw()”的规范,FTW_DEPTH 标志执行后序(深度优先)遍历,在访问目录节点之前访问子目录。
我认为任何标准算法都不会进行广度优先搜索。
想必你应该在nftw()接口的基础上写一个bfftw()。请注意,在进行扫描时,您必须将要递归访问的项目(目录)排队。
【讨论】:
以上是关于是否有任何 POSIX 函数或 glibc 扩展实现了广度优先文件树遍历?的主要内容,如果未能解决你的问题,请参考以下文章
[架构之路-59]:目标系统 - 平台软件 - 基础中间件 - POSIX(可移植操作系统接口)与标准库函数libc