【发布时间】:2012-08-19 13:19:12
【问题描述】:
从 STDIN 获取输入时读取系统调用何时终止??
【问题讨论】:
-
我不是一个反对者,但它应该是一个很好的方式来提问一个简短的答案......
-
好的,我知道了,但这是我的第一篇文章,这就是它发生的原因。
标签: c unix operating-system system
从 STDIN 获取输入时读取系统调用何时终止??
【问题讨论】:
标签: c unix operating-system system
这有很多部分。
首先,让我们澄清一下OS-level IO和stdio-level IO的区别。 read(2)和write(2)(POSIX IO)由POSIX指定,使用文件描述符(从0开始的数字)进行操作; fread(3) 和 fwrite(3) (stdio IO) 由 ISO C 指定并操作文件句柄,例如 STDIN,它在 POSIX 系统上封装文件描述符并在它们之上添加一些东西(例如输出缓冲)。
因此,read(2) 和 write(2) 不会自行进行任何缓冲。您在标准输入上看到的缓冲(文件描述符 0,not STDIN,这是上面的一种抽象)由终端(或终端仿真)完成。搜索规范模式以禁用它。
在 stdio 级别,fwrite(3)(和 printf(3)、fprintf(3) 等)根据输出连接的内容进行输出缓冲。
另请参阅:
How to check if a key was pressed in Linux?
Single characters are not printed on the terminal
Does printing to the screen cause a switch to kernel mode and running OS code in Unix?
【讨论】: