这可能是一个完全错误的问题,或者至少是迂腐的问题,但我正在研究 K&R,并且正在阅读本文档:文件输入/输出
尽管它声明流具有缓冲状态,但它没有提及默认情况下标准输入处于什么状态。
默认情况下是行缓冲吗?它是具体实施的吗?
运行此代码似乎表明它是行缓冲的:
#include <stdio.h>
main()
{
getchar();
}
Run Code Online (Sandbox Code Playgroud)
谢谢
这是一个很好的问题,但答案相当不具体。
\nC 标准特别指出,当且仅当(我的重点)流不引用交互式设备时,stdin和stdout在其初始状态下才完全缓冲。这表明其他任何行为都是未指定和/或实现定义的行为。该标准还规定交互设备的定义是实现定义的。
更新:引用最新标准的相关部分:
\nC17 \xc2\xa7 7.21.3p7:
\n\n\n当且仅当可以确定流不引用交互设备时,标准输入和标准输出流才被完全缓冲
\n
C17\xc2\xa7 5.1.2.3p7:
\n\n\n交互设备的构成是由实现定义的。
\n
C99 和 C11 标准中的语言是相同的,尽管部分编号不同。
\n