设有二元函数f(x,y) = f(x) + f(y)
其中: f(x) = f(x-1) * x (x >1)
f(x)=1 (x=1)
f(y) = f(y-1) + f(y-2) (y> 2)
f(y)=1 (y=1,2)
请编程建立3 个并发协作进程,它们分别完成f(x,y)、f(x)、f(y)
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int fx(int);
int fy(int);
int main(){
int pid1,pid2;
int pipe1[2],pipe2[2];
int m,n;
int x,y;
printf("please enter x,y\n");
scanf("%d%d",&x,&y);
if(pipe(pipe1)<0){
printf("pipe1 not created\n");
exit(1);
}
if(pipe(pipe2)<0){
printf("pipe2 not created\n");
exit(1);
}
pid1 = fork();
if(pid1<0){
printf("process1 not created\n");
exit(1);
}else if(pid1==0){
close(pipe1[0]);
close(pipe2[0]);
m=fx(x);
write(pipe1[1],&m,sizeof(int));
close(pipe1[1]);
close(pipe2[1]);
exit(1);
}else{
pid2 = fork();
if(pid2<0){
printf("process2 not created\n");
exit(1);
}else if(pid2==0){
close(pipe1[0]);
close(pipe2[0]);
n=fy(y);
write(pipe2[1],&n,sizeof(int));
close(pipe1[1]);
close(pipe2[1]);
exit(1);
}else{
int x=0,y=0;
close(pipe1[1]);
close(pipe2[1]);
read(pipe1[0],&x,sizeof(int));
read(pipe2[0],&y,sizeof(int));
printf("f(x,y)=%d\n",(x+y));
close(pipe1[0]);
close(pipe2[0]);
}
}
return 0;
}
int fx(int x){
if(x==1){
return 1;
}else{
return fx(x-1)*x;
}
}
int fy(int y){
if(y==1||y==2){
return 1;
}else{
return fy(y-1)+fy(y-2);
}
}
结果:
please enter x,y
5 10
f(x,y)=55