有一个包含许多文件的目录,我需要打开名为00343dde41bac11ef7020935ee3d*
的文件。我怀疑只有一个这样的文件。
我知道访问一个文件fopen (3)
比阅读整个目录readdir (3)
要快。
可以假设使用glob (3)
比使用readdir (3)
和测试文件名要快得多(需要更少的磁盘访问权限)吗?还有一个更强有力的陈述:我可以假设glob (3)
,在这种情况下,只有一个文件匹配且我的模式使用前缀,应该与fstat (3)
一样快吗?
研究:
答案 0 :(得分:3)
在* NIX系统上,只有一个内核接口可以访问目录内容:readdir()
。在内核级别,* NIX系统不支持任何类型的glob或模式甚至前缀匹配。只支持目录内容的哑线性列表。
glob()
(或类似wordexp()
)是一个库函数,它使用readdir()
库函数实现。最重要的是,它还必须使用glob表达式执行匹配。它不会比手动编码的readdir()
循环更快。
P.S。在文件系统级别上降低级别:磁盘上的目录条目通常不会排序。因此,不可能优化部分文件名查找。 (此外,大多数文件系统都不知道用于编码文件名的字符集。)