从STDIN
获取输入时,Read System调用何时终止答案 0 :(得分: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)
等等)根据输出连接的内容输出缓冲。
另见:
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?