glob(使用唯一前缀)比readdir更快吗?

时间:2016-03-15 22:35:33

标签: c posix glob

有一个包含许多文件的目录,我需要打开名为00343dde41bac11ef7020935ee3d*的文件。我怀疑只有一个这样的文件。

我知道访问一个文件fopen (3)比阅读整个目录readdir (3)要快。

可以假设使用glob (3)比使用readdir (3)和测试文件名要快得多(需要更少的磁盘访问权限)吗?还有一个更强有力的陈述:我可以假设glob (3),在这种情况下,只有一个文件匹配且我的模式使用前缀,应该与fstat (3)一样快吗?

研究:

1 个答案:

答案 0 :(得分:3)

在* NIX系统上,只有一个内核接口可以访问目录内容:readdir()。在内核级别,* NIX系统不支持任何类型的glob或模式甚至前缀匹配。只支持目录内容的哑线性列表。

glob()(或类似wordexp())是一个库函数,它使用readdir()库函数实现。最重要的是,它还必须使用glob表达式执行匹配。它不会比手动编码的readdir()循环更快。

P.S。在文件系统级别上降低级别:磁盘上的目录条目通常不会排序。因此,不可能优化部分文件名查找。 (此外,大多数文件系统都不知道用于编码文件名的字符集。)