?? ppipe.c~
字號:
/* * Filename : ppipe.c * copyright : (C) 2009 by Leon : 利用管道實現(xiàn)在父子進程間傳遞整數(shù) * Function */#include<stdlib.h>#include<stdio.h>#include<unistd.h>int main(int argc,char *argv[]){ int pid1; int pid2; int pipe1[2]; int pipe2[2]; int pipe3[2]; int pipe4[2]; int fx; int fy1; int fy2; int fxy; int x; int y; int m; int n;printf("請輸入 x 和 y 的值。\n"); scanf("%d",&m); scanf("%d",&n); if(pipe(pipe1)<0){ perror("pipe not create"); exit(EXIT_FAILURE); } if(pipe(pipe2)<0){ perror("pipe not create"); exit(EXIT_FAILURE); } if(pipe(pipe3)<0){ perror("pipe not create"); exit(EXIT_FAILURE); } if(pipe(pipe4)<0){ perror("pipe not create"); exit(EXIT_FAILURE); } if((pid1=fork())<0){ perror("pipe not create"); exit(EXIT_FAILURE); } else if(pid1==0){ close(pipe1[1]); close(pipe2[0]); do{ read(pipe1[0],&x,sizeof(int)); printf("child %d read:%d\n",getpid(),x); read(pipe1[0],&fx,sizeof(int)); printf("child %d read:%d\n",getpid,fx); fx=fx*x; write(pipe2[1],&fx,sizeof(int)); }while(x<m); close(pipe1[0]); close(pipe2[1]); exit(EXIT_SUCCESS); } else if ((pid2=fork())<0) { perror("process not create"); exit(EXIT_FAILURE); } else if(pid2==0) { close(pipe3[1]); close(pipe4[0]);int s=2; do{ read(pipe3[0],&fy1,sizeof(int)); printf("child %d read: %d\n",getpid(),fy1); read(pipe3[0],&fy2,sizeof(int)); printf("child %d read: %d\n",getpid(),fy2); fy1=fy1+fy2; write(pipe4[1],&fy1,sizeof(int));s++; }while(s<n);close(pipe3[0]);close(pipe4[1]);exit(EXIT_SUCCESS);}else{close(pipe3[0]);close(pipe4[1]);close(pipe1[0]);close(pipe2[1]);y=2;fy1=1;fy2=1;x=1;fx=1; while(x<m){ x++; write(pipe1[1],&x,sizeof(int)); printf("parent %d write:%d\n",getpid(),x); write(pipe1[1],&fx,sizeof(int)); printf("parent %d write:%d\n",getpid(),fx); read(pipe2[0],&fx,sizeof(int));} while(y<n){ write(pipe3[1],&fy1,sizeof(int)); printf("parent %d read:%d\n",getpid(),fy1); write(pipe3[1],&fy2,sizeof(int)); printf("parent %d read:%d\n",getpid(),fy2); fy1=fy2; read(pipe4[0],&fy2,sizeof(int));y++;}close(pipe1[1]);close(pipe2[0]);close(pipe3[1]);close(pipe4[0]);printf("the result is :%d",fx+fy2);return EXIT_SUCCESS;}}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -