glob(使用唯一前缀)是否比 readdir 更快?
Is glob (using a unique prefix) faster than readdir?
有一个包含很多文件的目录,我需要打开名为 00343dde41bac11ef7020935ee3d*
的文件。我怀疑只有一个这样的文件。
我知道访问一个文件fopen (3)
比读取整个目录readdir (3)
更快。
是否可以假设使用 glob (3)
会比简单地使用 readdir (3)
和测试文件名快得多(需要更少的磁盘访问)?还有一个更有力的说法:我可以假设 glob (3)
在这种情况下只有一个文件匹配并且我的模式使用前缀,应该和 fstat (3)
一样快吗?
研究:
- 我已阅读 http://linux.die.net/man/3/glob 页面,但找不到此问题的任何具体答案。
在 *NIX 系统上,只有一个内核接口可以访问目录内容:readdir()
。在内核级别,*NIX 系统不支持任何类型的 glob 或模式甚至前缀匹配。仅支持目录内容的哑线性列表。
glob()
(或类似wordexp()
)是一个库函数,它是使用readdir()
库函数实现的。除此之外,它还必须使用 glob 表达式执行匹配。它不能比手动编码 readdir()
循环更快。
P.S。再往下看,在文件系统级别:磁盘上的目录条目通常没有排序。因此,不可能优化部分文件名查找。 (此外,大多数文件系统都忽略了用于对文件名进行编码的字符集。)
有一个包含很多文件的目录,我需要打开名为 00343dde41bac11ef7020935ee3d*
的文件。我怀疑只有一个这样的文件。
我知道访问一个文件fopen (3)
比读取整个目录readdir (3)
更快。
是否可以假设使用 glob (3)
会比简单地使用 readdir (3)
和测试文件名快得多(需要更少的磁盘访问)?还有一个更有力的说法:我可以假设 glob (3)
在这种情况下只有一个文件匹配并且我的模式使用前缀,应该和 fstat (3)
一样快吗?
研究:
- 我已阅读 http://linux.die.net/man/3/glob 页面,但找不到此问题的任何具体答案。
在 *NIX 系统上,只有一个内核接口可以访问目录内容:readdir()
。在内核级别,*NIX 系统不支持任何类型的 glob 或模式甚至前缀匹配。仅支持目录内容的哑线性列表。
glob()
(或类似wordexp()
)是一个库函数,它是使用readdir()
库函数实现的。除此之外,它还必须使用 glob 表达式执行匹配。它不能比手动编码 readdir()
循环更快。
P.S。再往下看,在文件系统级别:磁盘上的目录条目通常没有排序。因此,不可能优化部分文件名查找。 (此外,大多数文件系统都忽略了用于对文件名进行编码的字符集。)