为什么对于给定的输入,以下代码的答案总是 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;
}
输入:
四
100100100100
两个问题。首先,exit
(如手册页中明确说明的那样(截断您传递的状态,使其在 0 到 255 (0377( 范围内
并且 status &0377 的值返回给父级
其次,您没有正确使用wait
返回的值。要获得子值的exit
值,您应该使用WEXITSTATUS(x)
它返回值的最低有效 8 位,这与执行x & 255
相同。
无论哪种方式,你传递sum
值的方法都不会按原样工作 - 你最好调查pipe
是如何工作的。