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()
32KB 버퍼가 사용됩니다(4KB보다 크기 때문).
(또는 다른 파일 시스템) st_blksize
에서 구성하는 방법을 모르겠습니다.ext4