C例程opendir(),readdir()和closedir()为我提供了遍历目录结构的方法.但是,readdir()返回的每个dirent结构似乎都没有为我提供一个有用的方法来获取DIR的指针集,我需要将它们递归到目录子目录中.
当然,它们给我文件的名称,所以我可以将该名称附加到目录路径和stat()和opendir()它们,或者我可以通过chdir()和roll更改进程的当前工作目录它通过chdir("..")返回.
第一种方法的问题是,如果目录路径的长度足够大,那么将包含它的字符串传递给opendir()的成本将超过打开目录的成本.如果你有点理论上的话,可以说你的复杂性可能超过线性时间(在目录树中(相对)文件名的总字符数).
而且,第二种方法存在问题.由于每个进程都有一个当前工作目录,因此除了一个线程之外的所有进程都必须在多线程应用程序中进行阻塞.另外,我不知道当前的工作目录是否仅仅是方便(即,在文件系统查询之前将相对路径附加到它).如果是这样,这种方法也会效率低下.
我接受这些功能的替代品.那么如何有效地遍历UNIX目录树(其下的文件总字符数的线性时间)?