理解c中的fork

时间:2015-03-10 18:52:02

标签: c fork

#include <stdio.h>
int num = 0;
int main(int argc, char*argv[]){
   printf("common line\n");  
   printf("%d", num); 
   int pid;
   pid = fork();
   if(pid == 0){       /*child*/
      num = 1;
   } else if(pid > 0){  /*parent*/
      num = 2;
   }
   printf("%d\n", num);
}

我在上面的程序中,公共行字符串在输出中单次显示。 但&#34; 0&#34;结果中有两次。

来自输出:

common line
01
02

OR

common line
02
01

根据我的理解, 0 应该只出现一次?

1 个答案:

答案 0 :(得分:3)

通过在字符串末尾添加换行符,您可以在fork之前隐式刷新输出缓冲区。您的另一个选择是使用fflush(stdout)明确刷新它。否则,当您fork()时,两个进程都只是事先将缓冲区中剩余的内容吐出(在您的情况下,未刷新的缓冲区仍包含来自num的{​​{1}})。