在 C 中,默认情况下 stdin 的缓冲状态是什么?

uri*_*ark 1 c buffer stdin

这可能是一个完全错误的问题,或者至少是迂腐的问题,但我正在研究 K&R,并且正在阅读本文档:文件输入/输出

尽管它声明流具有缓冲状态,但它没有提及默认情况下标准输入处于什​​么状态。

默认情况下是行缓冲吗?它是具体实施的吗?

运行此代码似乎表明它是行缓冲的:

#include <stdio.h>

main()
{
    getchar();
}
Run Code Online (Sandbox Code Playgroud)

谢谢

sj9*_*126 5

这是一个很好的问题,但答案相当不具体。

\n

C 标准特别指出,当且仅当(我的重点)流不引用交互式设备时,stdinstdout在其初始状态下才完全缓冲。这表明其他任何行为都是未指定和/或实现定义的行为。该标准还规定交互设备的定义是实现定义的。

\n

更新:引用最新标准的相关部分:

\n

C17 \xc2\xa7 7.21.3p7:

\n
\n

当且仅当可以确定流不引用交互设备时,标准输入和标准输出流才被完全缓冲

\n
\n

C17\xc2\xa7 5.1.2.3p7:

\n
\n

交互设备的构成是由实现定义的。

\n
\n

C99 和 C11 标准中的语言是相同的,尽管部分编号不同。

\n