readdirが一度に32Kディレクトリエントリのみを読み取ることができるのはなぜですか?

readdirが一度に32Kディレクトリエントリのみを読み取ることができるのはなぜですか?

readdir()一度に32Kディレクトリエントリのみを読み取ることができます。

一度に32Kエントリしか読めないのはなぜですか?バッファや他のパラメータによって異なりますか?

必要な数のディレクトリエントリを読み取れるようにこの値を変更できますか?

答え1

最大ディレクトリ数はファイルシステムによって異なります。

  • 拡張 2: 32768
  • 拡張 3: 31998
  • 拡張4:65000。dir_nlinkこの数を増やすにはフラグを使用してください。

2006年の承認後にのみ、最大ディレクトリ制限が32,000以上に増えたため、これ以上読むext4必要はありません。readdir()

サブディレクトリが32000を超える場合は、サブディレクトリの数が多く、パフォーマンスが低下しているかどうかを確認することをお勧めします。

答え2

glibcの関数はopendir()asの割り当てを計算します。ファイルシステムは推奨I / Oブロックサイズを渡すことができます。それに:readdir()MIN(MAX(statp->st_blksize, 32KB), 1MB)st_blksizeext4

$ stat -c '%o' .
4096

したがって、readdir()32 KB のバッファーが使用されます (4 KB より大きいため)。

(または他のファイルシステム)st_blksizeで設定する方法がわかりません。ext4

関連情報