使用fork和pipe的数组中元素的总和

我的问题是必须使用分叉和征服方法使用fork和pipe对数组中的元素求和。我是叉子和管道的新手,无法理解下面的代码出了什么问题。我也找不到任何可以帮助我解决问题的代码。感谢您的任何帮助。 n = 4个数字的输出:1 2 3 4是6。

#include <stdlib.h>
#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
int main(int argc, char **argv)
{
        int fd[2];
        int n,m,i,status,pid,sum=0;
        int array[100];
        pipe(fd);
        printf("Enter number of elements in array: ");
        scanf("%d",&n);

        for (i=0;i<n;i++)
                scanf("%d",&array[i]);

        while(n>2){
                m=n/2;
                n=n-m;
                if (pid=fork()<0)
                {
                        perror("fork error");
                        exit(1);
                }
                else
                {
                        if (pid==0)
                        {       //close(fd[1]);
                                read(fd[0],&sum,sizeof(sum));
                                for(i=0;i<=n;i++)
                                        sum=sum+array[i];
                                close(fd[0]);
                                write(fd[1],&sum,sizeof(sum));
                                printf("Sum of elements: %d",sum);
                        }
                        else
                        {
                                wait(&status);
                                //close(fd[1]);
                                read(fd[0],&sum,sizeof(sum));
                                for (i=0;i<=m;i++)
                                        sum=sum+array[i];
                                close(fd[0]);
                                write(fd[1],&sum,sizeof(sum));
                        }
                }
        }
        exit(0);
}
评论