【发布时间】:2013-02-22 03:49:54
【问题描述】:
#include <stdio.h>
int num = 0;
int main(int argc, char*argv[]){
int pid;
pid = fork();
printf("%d", num);
if(pid == 0){ /*child*/
num = 1;
}else if(pid > 0){ /*parent*/
num = 2;
}
printf("%d", num);
}
我无法理解为什么可能的输出是 0102 或 0012 或 0201 或 0021。
这是我(认为)它应该产生的结果。它命中第一个 printf 语句,无论哪个子或父首先执行, num 都没有被修改,所以首先为 0。 THEN next 是 1 或 2,然后执行下一个进程,因此再次从 0 开始(从父级复制),然后再次为 1 或 2。所以可能的输出应该是:
0101 或 0102 或 0201 或 0202
【问题讨论】:
-
argc 后面的分号是干什么的。这是一个语法错误。
-
int main(int argc ,char*argv[]) 这应该是主要的
-
你应该包括
#include <unistd.h>。这是fork()的正确头文件。