C 叉子重复两次?
父母重复两次。为什么呢? 此外,父母是如何从孩子那里得到C 叉子重复两次?,c,fork,C,Fork,父母重复两次。为什么呢? 此外,父母是如何从孩子那里得到2?孩子的a和b有自己的虚拟内存,那么我们如何将结果传递给家长呢? 我很困惑 进一步调查 当我将return 0插入案例0时,它不会重复。看起来switch语句仍在继续。我是否遗漏了switch语句的某些内容?在C中,switch语句在缺省情况下是通过case实现的;你必须把一个中断(或return)语句,否则,例如,子级将同时执行子级代码和父级代码。您的案例中没有break语句,因此每个案例都会进入下一个案例。具有pid==0的子进程将
2
?孩子的a
和b
有自己的虚拟内存,那么我们如何将结果传递给家长呢?
我很困惑
进一步调查
当我将
return 0
插入案例0
时,它不会重复。看起来switch语句仍在继续。我是否遗漏了switch语句的某些内容?在C中,switch语句在缺省情况下是通过case实现的;你必须把一个中断
(或return
)语句,否则,例如,子级将同时执行子级代码和父级代码。您的案例中没有break
语句,因此每个案例都会进入下一个案例。具有pid==0
的子进程将同时执行0和默认案例块。As fork将两个pid的一个返回给父进程,另一个返回给子进程,对于父进程,它将返回>0pid
,对于子进程,将0返回为pid。因此,执行0的case,但不存在中断,因此也会执行默认值,因为在没有中断语句的情况下,switch case会失效……switch statement会失效;)啊对。我完全震惊了。我很长时间没用这个开关了。谢谢我一分钟前也发现了。这就是为什么我得到了2
。你认为你的答案对已经给出的答案有什么补充?为什么这个格式如此奇怪?
#include <stdio.h>
#include <unistd.h>
int main()
{
int a = 1, b = 1;
int rval, pid;
pid = fork();
switch(pid)
{
case -1:
printf("I am bad.\n");
case 0:
printf("I am in child.\n");
rval = a + b;
printf("leaving child.\n");
default:
wait();
printf("I am back to parent.\n");
//wait();
printf("%d \n", rval);
printf("leaving parent.\n");
}
return 0;
}
>> ./demo
I am in child.
leaving child.
I am back to parent.
2
leaving parent.
I am back to parent.
134513584
leaving parent.