readdir()
一次只能读取 32K 目录项。
为什么它一次只能读取 32K 条目?它取决于缓冲区或任何其他参数吗?
我可以更改该值以便可以读取任意数量的目录条目吗?
答案1
最大目录数取决于文件系统:
- 分机2:32768
- 分机3:31998
- ext4: 65000。使用
dir_nlink
标志来增加这个数字
只是自 2006 年ext4
批准以来,最大目录限制才增加到 32000 个以上,因此没有必要readdir()
阅读更多内容。
如果您有超过 32000 个子目录,我会考虑了解由于大量子目录而导致的性能下降
答案2
glibc 的函数计算asopendir()
的分配。文件系统可以通过 推荐 I/O 块大小。其上有:readdir()
MIN(MAX(statp->st_blksize, 32KB), 1MB)
st_blksize
ext4
$ stat -c '%o' .
4096
因此,readdir()
将使用 32KB 缓冲区(因为这大于 4KB)。
我不知道在(或其他文件系统)st_blksize
上进行配置的方法。ext4