为什么readdir一次只能读取32K的目录项?

为什么readdir一次只能读取32K的目录项?

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_blksizeext4

$ stat -c '%o' .
4096

因此,readdir()将使用 32KB 缓冲区(因为这大于 4KB)。

我不知道在(或其他文件系统)st_blksize上进行配置的方法。ext4

相关内容