wait()和exit()调用的错误输出

时间:2018-02-02 17:40:49

标签: c linux wait exit

为什么给定输入的以下代码的答案总是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

1 个答案:

答案 0 :(得分:2)

两个问题。首先exit(如联机帮助页中明确说明的那样)将您传递的状态截断为0到255(0377)

  

和状态&amp;的价值0377将返回父级

其次,您未正确使用wait返回的值。要获得孩子的exit值,您需要使用WEXITSTATUS(x),它返回值的最低8位,与执行x & 255相同。< / p>

无论哪种方式,您传递sum的价值的方法都不会按原样运作 - 您最好调查pipe的工作方式。