2017-05-05 9 views
0

getchar()의 기능에 따라 stdio 스트림 버퍼가 비어있을 때이를 차단해야합니다. 이 차단 기능은 어떻게 구현됩니까?getchar()은 stdio 스트림과 어떻게 동기화됩니까?

그리고 성능상의 이유로 getchar/getc를 매크로 (직접 어셈블리)로 구현할 수 있으며이 경우 차단 기능이 어떻게 보장되는지 설명합니다.

답변

0

차단은 OS 커널을 제어합니다. 연산이 실현 될 수 없다면, 커널은 해당 이벤트 (적어도 숯을 입력에 사용할 수있을 때)가 발견 될 때까지 프로세스를 대기열에 넣습니다.

매크로로 구현 된은 차단과 관련하여 특별한 의미가 없습니다. 이것은 단지 함수가 아니므로 그 주소를 얻을 수 없다는 것을 의미합니다. 참고 매크로는 직접 어셈블리을 의미하지 않으며 다음과 같은 C 매크로를 의미합니다.

#define getchar(void) fgetc(stdin)