语言:C,OS: Linux
码:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void)
{
fork();
printf("hello world\n");
fork();
printf("bye\n");
return 0;
}
输出:
hello world
bye
hello world
bye
hello world
bye
hello world
bye
根据this和this,printf()缓冲输出直到遇到换行符.
那么为什么我们在这种情况下有4个“你好世界”呢? (而不是2“你好世界”)
编辑:对不起所有,但像@GregHewgill所说,我从一个输出不能直接到终端的环境运行这个程序,当我在我的计算机上再次检查它时,它只是按预期运行.
最佳答案
According to this and this, printf() buffers output until a newline is encountered.
打印换行符通常仅在输出发送到终端设备时才刷新.
例如:
$./a.out >out_file
即使使用换行符也不会刷新缓冲区.所以,你的期望是有缺陷的.
获得“所需”输出(2个hello world和4个bye)的唯一正确方法是使用setbuf
完全禁用缓冲:
setbuf(stdout, 0);
或使用fflush
:
fflush(stdout);
每次printf调用后显式刷新.