⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ppipe.c~

📁 设有二元函数 f(x,y) = f(x) + f(y) 其中:f(x) = f(x-1) * x (x>1) f(x) = 1 (x=
💻 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 + -