C语言 使用 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;
} 

输入:

100100100100

两个问题。首先,exit(如手册页中明确说明的那样(截断您传递的状态,使其在 0 到 255 (0377( 范围内

并且 status &0377 的值返回给父级

其次,您没有正确使用wait返回的值。要获得子值的exit值,您应该使用WEXITSTATUS(x)它返回值的最低有效 8 位,这与执行x & 255相同。

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

相关内容

  • 没有找到相关文章

最新更新