代码之家  ›  专栏  ›  技术社区  ›  Pushan Gupta

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

  •  0
  • Pushan Gupta  · 技术社区  · 7 年前

    为什么对于给定的输入,以下代码的答案总是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 回复  |  直到 7 年前
        1
  •  2
  •   Chris Turner    7 年前

    两个问题。首先 exit (如手册页中明确说明的那样)将您传递的状态截断为介于0到255(0377)之间

    以及状态和;0377返回给父级

    其次,您没有使用 wait 正确地让孩子 出口 您打算使用的价值 WEXITSTATUS(x) 返回与执行相同的值的最低有效8位 x & 255 .

    无论哪种方式,您传递回 sum 不会按原样工作-你最好调查一下 pipe s工作。