与fork()一起使用时了解stdout输出

时间:2016-08-06 14:32:43

标签: c

这是我的C程序:

int main() {
    fork();
    printf("one ");
    fork();
    printf("two ");
}

输出结果为:

one two one two one two one two

但是,如果我更改代码并在print语句中添加\n

int main() {
    fork();
    printf("one\n");
    fork();
    printf("two\n");
}

输出结果为:

one
one
two
two
two
two

或者有时候(订单可以改变):

one
two
one
two
two
two

为什么第一个程序中输出8个字,第二个程序中输出6

1 个答案:

答案 0 :(得分:1)

2个进程执行第一个printf(),然后4个进程执行第二个printf(),因此应该有6个输出。

在第一个代码中,似乎在刷新缓冲区之前执行fork(),然后重复缓冲区的内容,然后出现过量输出。

在第二个代码中,似乎\n让它刷新缓冲区,因此没有出现多余的输出。