우분투 19.10를 실행하는 x64 시스템에서 파일 기술자의 비트의 크기는 얼마입니까?

programer_200 :

이러한 표준 입출력 같은 파일 디스크립터의 비트 크기 란, 그것은 32 비트 정수?

도토리 :

당신은 실제 파일 기술자에 의해 반환 된 (및 사용) 리눅스 시스템 콜에 대해 이야기하는 경우, 다음의 맨 페이지를 살펴 걸릴 open등 @JonathanLeffler에서 알 수 있듯이을.

예를 들어 :

int open(const char *pathname, int flags);

의 반환 값은 open()파일 기술자, 이후 시스템 호출에 사용되는 작은 음수가 아닌 정수입니다. [...] 성공적인 호출에 의해 반환되는 파일 기술자는 현재 프로세스에 대한 열 가장 낮은 번호의 파일 기술자가 될 것입니다.

주어진 유닉스 계열 시스템 LP64이다, int따라서 파일 기술자는 32 비트 폭이다.

그러나 참고 커널은 가능한 한 작은 정수로 당신을 줄 것이다 그리고 당신은 일반적으로 (참조 그 전에 제한 방법에 달할 것으로 파일 기술자의 수에 제한을 인해 커널 글로벌 제한 또는 소프트 / 하드 한계) 중 하나.

이 경우,이 수단 정말 그것을 필요로, 당신은 이론적으로 작은 정수를 사용할 수는 예를 들어, 파일 설명, 저장하기 int16_t또는 int8_t(프로세스는 한 번에 많은 파일 기술자를 사용하지 않는 가정을).


대신, 당신이 언급하는 경우 stdin등, 그 파일 기술자는 아니지만 파일은 C 표준에 의해 정의 스트림.

그들은 포인터 타입 (와 표현으로 확장 매크로이다 FILE *x86_64의 64 비트 폭처럼 일반적인 64 비트 플랫폼) 및 포인터.

7.21p3 (입력 / 출력을 참조하십시오 <stdio.h>) :

stdin
stdout
stderr

타입 '포인터 표현되는 FILE'그 점에 FILE표준 오차, 입력 및 출력 스트림을 각각 연관된 개체.

추천

출처http://43.154.161.224:23101/article/api/json?id=19981&siteId=1