-1

从 STDIN 获取输入时读取系统调用何时终止?

4

1 回答 1

2

这有很多部分。

首先,让我们澄清一下 OS 级 IO 和 stdio 级 IO 的区别。read(2)write(2)(POSIX IO) 由 POSIX 指定,使用文件描述符(从 0 开始的数字)进行操作;fread(3)fwrite(3)(stdio IO) 由 ISO C 指定并在文件句柄上进行操作,例如STDINPOSIX 系统上的文件句柄封装文件描述符并在它们之上添加一些东西(例如输出缓冲)。

所以,read(2)不要write(2)自己做任何缓冲。您在标准输入上看到的缓冲(文件描述符0而不是 STDIN上面的一种抽象)是由终端(或终端仿真)完成的。搜索规范模式以禁用它。

在 stdio 级别,fwrite(3)(和printf(3), fprintf(3), 等)根据输出连接的内容进行输出缓冲。

另请参阅:
如何检查 Linux 中是否按下了某个键?
终端上不打印单个字符
打印到屏幕是否会导致切换到内核模式并在 Unix 中运行 OS 代码?

于 2012-08-19T13:36:55.370 回答