为什么C直到换行才打印到shell?

时间:2013-03-30 01:42:36

标签: c linux macos shell

在C中,有时在我打印换行符\n之前,我的输出不会打印到终端。例如:

int main()
{
   printf("Hello, World");
   printf("\n");
   return 0;
}

Hello World将在下一个printf之前打印(我知道这是通过在gdb中设置断点)。有人可以解释为什么会发生这种情况以及如何绕过它?

谢谢!

2 个答案:

答案 0 :(得分:8)

出于性能原因这样做:将数据传递到控制台太昂贵(就执行速度而言)逐个字符地执行。这就是输出被缓冲直到打印换行的原因:字符被收集在一个数组中,直到打印时为止,此时整个字符串被传递到控制台。您还可以显式强制输出,如下所示:

fflush(stdout);

答案 1 :(得分:4)

除了fflush(),您还可以使用setvbuf(3)设置缓冲选项。