fork for for循环后计算进程

时间:2013-05-19 14:21:26

标签: c linux fork

我有以下代码:

for(i=1; i<=2; i++)
{
    fork();
    printf("x ");   
}

我计算出x应打印6次:第一次迭代两次,第二次扫描4次。

相反,X打印8次。为什么呢?

1 个答案:

答案 0 :(得分:7)

因为缓冲。通常,stdout是行缓冲的,所以

printf("x ");

不会立即将"x "写入终端,而是写入输出缓冲区。这是在进程fork()时复制的,因此第二次迭代后的四个进程中的每一个在输出缓冲区中都有两个"x " [一个来自父级/在第一次迭代中分叉之前,一个来自第二次迭代]当它退出并且完全打印出八个x时。

printf("x ");后立即冲洗缓冲区,只打印六个。