根据getchar()的功能,当stdio流缓冲区为空时需要阻止它。这个阻止功能是如何实现的?
据说由于性能原因,getchar / getc可以实现为宏(直接汇编),在这种情况下如何确保阻塞功能。
答案 0 :(得分:0)
阻止负责OS内核。如果无法实现操作,则内核将进程置于等待队列中,使其不符合条件,直到检测到相应的事件(至少有一个char可用于输入)。
以宏实现的与阻止无关。这只是意味着它不是一个功能,你就可以获得它的地址。注意宏并不意味着直接汇编,它意味着C宏如下:
#define getchar(void) fgetc(stdin)