我的问题是必须使用分叉和征服方法使用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);
}