lseek 함수가 파일 설명자를 긴 정수로 반환하는 이유는 무엇입니까? [폐쇄]

lseek 함수가 파일 설명자를 긴 정수로 반환하는 이유는 무엇입니까? [폐쇄]

책에 따르면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_CURSEEK_END)가 System V에 도입되었습니다. 이전에는 wherece가 0(절대), 1(현재 오프셋 기준) 또는 2(파일 끝 기준)로 지정되었습니다. 많은 소프트웨어에는 여전히 이러한 번호가 하드코딩되어 있습니다.

l이름의 문자는 lseek"long"을 나타냅니다. 이 off_t데이터 유형을 소개하기 전에,오프셋 매개변수그리고반환 값긴 정수입니다. lseek는 버전 7에서 긴 정수가 C에 추가되었을 때 도입되었습니다. (버전 6의 기능 seek과 유사한 기능을 제공합니다 tell.)

텍스트 어디에도 특정 시점의 반환 값이 파일 설명자라는 언급이 없습니다.

관련 정보