📄 ppipe.c~
字号:
/* * Filename : ppipe.c * copyright : (C) 2009 by Leon : 利用管道实现在父子进程间传递整数 * 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;}}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -