69,371
社区成员
发帖
与我相关
我的任务
分享
#include<unistd.h>
#include<signal.h>
#include<stdio.h>
int pid1,pid2;
int i;
int s=0;
int *p,*q;
main(){
int fd1[2],fd2[2],fd3[2];
int outpipe[50],inpipe[50];
pipe(fd1);
pipe(fd2);
pipe(fd3);
while((pid1=fork())==-1);
if(pid1==0){
p=inpipe;
for(i=0;i<50;i++){
read(fd1[0],p,sizeof(int));
s=s+*p;
p++;
}
printf("%d\n",s);
inpipe[0]=s;
lockf(fd3[1],1,0);
write(fd3[1],inpipe,sizeof(int));
lockf(fd3[1],0,0);
}
else{
s=0;
while((pid2=fork())==-1);
if(pid2==0){
p=inpipe;
for(i=0;i<50;i++){
read(fd2[0],p,sizeof(int));
s=s+*p;
p++;
}
inpipe[0]=s;
lockf(fd3[1],1,0);
write(fd3[1],inpipe,sizeof(int));
lockf(fd3[1],0,0);
}
else{
for(i=0;i<50;i++)
outpipe[i]=(i+1)*2;
p=outpipe;
lockf(fd1[1],1,0);
for(i=0;i<50;i++){
write(fd1[1],p,sizeof(int));
p++;
}
lockf(fd1[1],0,0);
for(i=0;i<50;i++)
outpipe[i]=i*2+1;
p=outpipe;
lockf(fd2[1],1,0);
for(i=0;i<50;i++){
write(fd2[1],p,sizeof(int));
p++;
}
lockf(fd2[1],0,0);
wait(0);
s=0;
read(fd3[0],p,sizeof(int));
s=s+*p;
printf(" %d\n",*p);
wait(0);
read(fd3[0],p,sizeof(int));
printf(" %d\n",*p);
s=s+*q;
}
}
}