【问题标题】:In C what buffering state is stdin by default?在 C 中,默认情况下 stdin 是什么缓冲状态?
【发布时间】:2021-09-16 08:27:56
【问题描述】:

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

虽然它声明流具有一个缓冲状态,但它没有提及标准输入默认处于什么状态。

是否默认行缓冲?它是特定于实现的吗?

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

#include <stdio.h>

main()
{
    getchar();
}

谢谢

【问题讨论】:

  • 简而言之:“stdin 是缓冲的(行缓冲不影响 stdin)stdin 是缓冲的(如果连接到终端则行缓冲)stderr 是非缓冲的。”Link

标签: c buffer stdin


【解决方案1】:

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

C 标准明确规定 stdinstdout 在初始状态下是完全缓冲的当且仅当(我强调)流不涉及交互式设备。这表明其他任何事情都是未指定和/或实现定义的行为。该标准还规定交互设备的定义是实现定义的。

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

C17 § 7.21.3p7:

标准输入和标准输出流被完全缓冲当且仅当流 可以确定不是指交互设备

C17 § 5.1.2.3p7:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-13
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 1970-01-01
    • 2013-12-08
    相关资源
    最近更新 更多