为什么给定输入的以下代码的答案总是32?
我预计它会是400
代码应该从子进程获取输入并将其传递给父进程并在父进程内打印。
#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/types.h>
#include<sys/wait.h>
int main(){
pid_t p=fork();
if(p>0){
int x=-1;
wait(&x);
printf("sum: %d",x/255);
}else{
int sum=400,i;
int n,x;
scanf("%d",&n);
for(i=0;i<n;i++){
scanf("%d",&x);
sum+=x;
}
exit(sum);
}
return 0;
}
输入:
4
100 100 100 100
答案 0 :(得分:2)
两个问题。首先exit
(如联机帮助页中明确说明的那样)将您传递的状态截断为0到255(0377)
和状态&amp;的价值0377将返回父级
其次,您未正确使用wait
返回的值。要获得孩子的exit
值,您需要使用WEXITSTATUS(x)
,它返回值的最低8位,与执行x & 255
相同。< / p>
无论哪种方式,您传递sum
的价值的方法都不会按原样运作 - 您最好调查pipe
的工作方式。