#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 应该只出现一次?
答案 0 :(得分:3)
通过在字符串末尾添加换行符,您可以在fork之前隐式刷新输出缓冲区。您的另一个选择是使用fflush(stdout)
明确刷新它。否则,当您fork()
时,两个进程都只是事先将缓冲区中剩余的内容吐出(在您的情况下,未刷新的缓冲区仍包含来自num
的{{1}})。