当连接到终端时,stdout 是按行缓冲的,但我记得在某个地方读取(至少从stdin)会自动刷新 stdout。 所有我使用过的 C 实现都是这样做的,但我现在找不到它在标准中的说明。
它确实是有道理的,否则像这样的代码:
printf("Type some input: ");
fgets(line, sizeof line, stdin);
需要额外添加 fflush(stdout);
那么这里stdout是否保证被刷新?
编辑:
正如几个回复所说,标准中似乎没有保证在我的示例中stdout的输出将出现在stdin读取之前,但另一方面,此意图在(我免费的标准草案副本中)已声明:
交互式设备的输入和输出动态应按照7.19.3中指定的进行。 这些要求的目的是为了使未经缓冲或行缓冲的输出尽可能快地出现,以确保提示消息实际上在程序等待输入之前出现。
(ISO/IEC 9899:TC2 委员会草案 - 2005年5月6日,第14页)。
因此似乎没有保证,但在大多数实现中它可能仍能正常工作。(著名的最后一句话......)