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_blksize
ext4
$ stat -c '%o' .
4096
したがって、readdir()
32 KB のバッファーが使用されます (4 KB より大きいため)。
(または他のファイルシステム)st_blksize
で設定する方法がわかりません。ext4