책에 따르면Unix 환경의 고급 프로그래밍:-
"lseek 이름의 문자 l은 'long'을 의미합니다. off_t 데이터 유형이 도입되기 전에는 오프셋 매개변수와 반환 값이 모두 길었습니다. C에 long이 추가되었을 때 lseek는 버전 7에 있었습니다(함수 eek 및 버전 6에서도 비슷한 기능을 제공한다고 알려주세요.)"
우리는 파일 설명자의 값이 제한되어 있다는 것을 알고 있습니다. 값이 범위 내에 있습니다.0-OPEN_MAX-1따라서 이전 버전이 파일 설명자로 오랫동안 사용된 경우 이는 프로세스당 열 수 있는 최대 파일 수가 시스템 단어 형식(32비트 또는 64비트)에 따라 변경되어야 함을 의미할 수 있습니다. 사용 가능한 파일 설명자 수는 아마도 10^18 정도일 것입니다. 내가 맞나요?
답변1
lseek
매개변수 long
와 반환값은 다음과 같습니다.오프셋파일에서 추가해도 long
파일 설명자에는 영향이 없습니다.
다양한 단어 길이는 사용 가능한 오프셋 크기에 영향을 미칩니다.lseek64
해결책을 찾으세요.
답변2
나는 이것이 오해라고 생각합니다.
책의 전체 인용문은 다음과 같습니다.
세 가지 기호 상수(
SEEK_SET
,SEEK_CUR
및SEEK_END
)가 System V에 도입되었습니다. 이전에는 wherece가 0(절대), 1(현재 오프셋 기준) 또는 2(파일 끝 기준)로 지정되었습니다. 많은 소프트웨어에는 여전히 이러한 번호가 하드코딩되어 있습니다.
l
이름의 문자는lseek
"long"을 나타냅니다. 이off_t
데이터 유형을 소개하기 전에,오프셋 매개변수그리고반환 값긴 정수입니다. lseek는 버전 7에서 긴 정수가 C에 추가되었을 때 도입되었습니다. (버전 6의 기능seek
과 유사한 기능을 제공합니다tell
.)
텍스트 어디에도 특정 시점의 반환 값이 파일 설명자라는 언급이 없습니다.