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()32KB 버퍼가 사용됩니다(4KB보다 크기 때문).

(또는 다른 파일 시스템) st_blksize에서 구성하는 방법을 모르겠습니다.ext4

관련 정보