我有这个程序,我觉得有点误导和难以理解:
int i=2;
int j=10;
int p;
while(--i && (p=fork())
{
if(p<0)
exit(EXIT_SUCCESS);
}
j=j+2;
if(p==0)
{
i=i*3;
j=j*3;
}
else
{
i=i*3;
j=j*2;
}
printf("pid=%d i=%d j=%d\n",getpid(),i,j);
该计划产生以下结果:
父级:PIDHERE,i = 0,j = 24。
儿童:PIDHERE,i = 3,j = 36。
但为什么会发生这种情况呢?如果父有i = 0,则表示while执行了两次,但是并不意味着创建了两个子而不是一个,因为while有fork()语句?
此外,什么时候完全停止循环? (逻辑表达式与fork()混淆!)。
答案 0 :(得分:2)
<pre>
mid => messages id
sender => The sender of the message
receiver => The receiver of the message
msg => The message sent
f_msg_date => date in which the message was sent
</pre>
预先裁定--i
。 i
第一次评估其条件时,while
的值为i
。第二次,1
的值为i
。所以,循环只会产生一个孩子。
当0
看到while
为i
(在父级中),或者0
返回fork
(在孩子中)时0
停止。
答案 1 :(得分:1)
由于precrement,while循环基本上等同于:
i=1;
p=fork();
if(p<0)
return 0;
else if(p)
i=0;
fork()
只被调用一次。