为什么对于给定的输入,以下代码的答案总是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
两个问题。首先 exit (如手册页中明确说明的那样)将您传递的状态截断为介于0到255(0377)之间
exit
以及状态和;0377返回给父级
其次,您没有使用 wait 正确地让孩子 出口 您打算使用的价值 WEXITSTATUS(x) 返回与执行相同的值的最低有效8位 x & 255 .
wait
出口
WEXITSTATUS(x)
x & 255
无论哪种方式,您传递回 sum 不会按原样工作-你最好调查一下 pipe s工作。
sum
pipe