// Der Vater erzeugt 3 Kindprozesse (der erste addiert, der zweite multipliziert, der dritte // dividiert), und Rechnet den Ausdruck (1+2)*3/4 aus. #include #include #include int main(){ int x,i,a=1,b=2,c=3,d=4; int pfd[2],pfd1[2],pfd2[2],pfd3[2]; pipe(pfd); pipe(pfd1); //pfd[0]; //pfd[1]; //if (fork()==0){} switch(fork()){ case 0:{//Kind1 (+) close(pfd1[1]);close(pfd[0]); read(pfd1[0],&a,sizeof(int)); read(pfd1[0],&b,sizeof(int)); a+=b; write(pfd[1],&a,sizeof(int)); exit(0);} default://Vater {close(pfd1[0]); pipe(pfd2); switch(fork()){ case 0://Kind2 (*) read(pfd2[0],&a,sizeof(int)); read(pfd2[0],&b,sizeof(int)); a*=b; write(pfd[1],&a,sizeof(int)); exit(0); default:{//Vater pipe(pfd3); close(pfd2[0]); switch(fork()) { case 0://Kind3 (/) { close(pfd3[1]); close(pfd1[1]);//... read(pfd3[0],&a,sizeof(int)); read(pfd3[0],&b,sizeof(int)); a/=b; write(pfd[1],&a,sizeof(int)); exit(0); } default:{//Vater write(pfd1[1],&a,sizeof(int)); write(pfd1[1],&b,sizeof(int)); read(pfd[0],&x,sizeof(int)); write(pfd2[1],&x,sizeof(int)); write(pfd2[1],&c,sizeof(int)); read(pfd[0],&x,sizeof(int)); write(pfd3[1],&x,sizeof(int)); write(pfd3[1],&d,sizeof(int)); read(pfd[0],&x,sizeof(int)); printf("Ergebnis:%d\n",x); } } } } } } }