Robert Love의 교과서에 따른 파일 크기 제한

Robert Love의 교과서에 따른 파일 크기 제한

로버트 러브로부터리눅스 시스템 프로그래밍(2007, O'Reilly), 첫 번째 문단(1장, 10페이지)에 다음과 같은 내용이 나와 있습니다.

파일 위치의 최대 크기는 파일을 저장하는 데 사용되는 C 유형의 크기(최신 Linux에서는 64비트)에 의해서만 제한됩니다.

그러나 다음 문단에서 그는 이렇게 말합니다.

파일이 비어 있을 수 있으므로(길이가 0임) 유효한 바이트가 포함되어 있지 않습니다. 최대 파일 위치와 마찬가지로 최대 파일 길이는 Linux 커널이 파일을 관리하는 데 사용하는 C 유형의 크기에 의해서만 제한됩니다.

나는 이것이 아마도 매우 기본적인 것임을 알고 있지만 그는 파일 크기가 다음의 영향을 받는다고 말합니다.문서데이터 유형 또는정수데이터 종류?

답변1

그는 최대값이 (2^64) - 1 unsigned 또는 (2^63) - 1 signed (1비트가 부호 +/-를 보유함)인 64비트 유형으로 제한되어 있다고 말합니다.

유형은 가 아닙니다 . FILE이는 파일 오프셋을 추적하기 위해 구현에서 사용하는 방법입니다.off_t징후64비트 유형. 1 (2^63) - 1 = 9223372036854775807. 1TB가 1000^4바이트라면 약 920만TB에 해당합니다. 아마도 부호 있는 유형을 사용하는 이유는 -1 값(오류 등의 경우) 또는 상대 오프셋을 보유할 수 있기 때문일 것입니다.

fseek()유사하고 ftell()서명된 함수를 사용하는 long것도 64비트 GNU 시스템에서 64비트입니다.


1. types.h과를 참조하세요.typesizes.h/usr/include/bits

관련 정보