从 STDIN 获取输入时读取系统调用何时终止?
问问题
1490 次
1 回答
2
这有很多部分。
首先,让我们澄清一下 OS 级 IO 和 stdio 级 IO 的区别。read(2)
和write(2)
(POSIX IO) 由 POSIX 指定,使用文件描述符(从 0 开始的数字)进行操作;fread(3)
和fwrite(3)
(stdio IO) 由 ISO C 指定并在文件句柄上进行操作,例如STDIN
POSIX 系统上的文件句柄封装文件描述符并在它们之上添加一些东西(例如输出缓冲)。
所以,read(2)
不要write(2)
自己做任何缓冲。您在标准输入上看到的缓冲(文件描述符0
,而不是 STDIN
上面的一种抽象)是由终端(或终端仿真)完成的。搜索规范模式以禁用它。
在 stdio 级别,fwrite(3)
(和printf(3)
, fprintf(3)
, 等)根据输出连接的内容进行输出缓冲。
另请参阅:
如何检查 Linux 中是否按下了某个键?
终端上不打印单个字符
打印到屏幕是否会导致切换到内核模式并在 Unix 中运行 OS 代码?
于 2012-08-19T13:36:55.370 回答