8.2 缓冲区
当您在一些系统上运行前面的程序时,您所输入的文本立即回显。也就是说,一个可能的运行示例如下所示:
HHeelllloo,,tthheerree..II wwoouulldd[enter]
lliikkee aa#
前面描述的行为是例外的。在大多数系统上,在您按下回车键之前什么都不会发生,正如在第一个例子中所示。
输入字符的立即回显是非缓冲(unbuffered)或直接(direct)输入的一个实例,它表示您所键入的字符对正在等待的程序立即变为可用。
相反,延迟回显是缓冲(buffered)输入的实例,这种情况下您所键入的字符被收集并存储在一个被称为缓冲区(buffer)的临时存储区域中。按下回车键可使您所键入的字符 对程序变为可用。
为什么需要缓冲区?首先,将若干个字符作为一个块传输比逐个发送这些字符耗费时间少。其次,如果您输入有误,就可以使用您的键盘更正功能来修正错误。当最终按下回车键时,您就可以发送正确的输入。
缓冲分为两种:完全缓冲(fully buffered)I/O和行缓冲(line-buffered)I/O。对完全缓冲来说,缓冲区满时被清空(内容被发送至其目的地)。这种类型的缓冲通常出现 在文件输入中。缓冲区的大小取决于系统,但512字节和4096字节是常见的值。对行缓冲I/O来说,遇到一个换行字符时将被清空缓冲区。键盘输入是标准的行缓冲,因此按下回车键将清空缓冲区。
不存在调用非缓冲输入的标准ANSI方式;使用的方法取决于计算机系统。
来源:oschina
链接:https://my.oschina.net/u/2754880/blog/700911