📄 pipe_to_tram.c
字号:
/*pipe3.c*/
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <stdio.h>
#include <fcntl.h>
#define MAXLINE 1024
#define READ 0
#define WRITE 1
/*函数x*/
int functionx(int nx);
/*函数y*/
int functiony(int ny);
main(void)
{
pid_t pid_x,pid_y;
int fdx1[2],fdy1[2],fdx2[2],fdy2[2];
/*初始化管道*/
pipe(fdx1);
pipe(fdy1);
pipe(fdx2);
pipe(fdy2);
/*创建子进程1*/
pid_x = fork();
if(pid_x < 0)
{
printf("Create process error!\n");
exit(0);
}
if(pid_x == 0)
{
int numx,funx;
printf("childx process ID:%d\n",getpid());
close(fdx1[WRITE]);
close(fdx2[READ]);
/*从管道读出x*/
read(fdx1[READ],&numx,sizeof(int));
/*函数计算*/
funx = functionx(numx);
printf("childx x=%d\n",funx);
/*向管道发送*/
write(fdx2[WRITE],&funx,sizeof(int));
close(fdx1[READ]);
close(fdx2[WRITE]);
}
if(pid_x > 0)
{
/*创建子进程2*/
pid_y =fork();
if(pid_y < 0)
{
printf("Create process error!\n");
exit(0);
}
if(pid_y == 0)
{
int numy,funy;
printf("childy process ID:%d\n",getpid());
close(fdy1[WRITE]);
close(fdy2[READ]);
/*从管道读出x*/
read(fdy1[READ],&numy,sizeof(int));
// Read(fdy1,fdy2,&numy);
/*函数计算*/
funy = functiony(numy);
printf("childy y=%d\n",funy);
/*向管道发送*/
write(fdy2[WRITE],&funy,sizeof(int));
}
if(pid_y > 0)
{
int x,y,funxy;
int fx,fy;
sleep(1);
printf("parentxy process ID:%d\n%",getpid());
/*参数输入*/
printf("enter x,y\n");
scanf("%d,%d",&x,&y);
close(fdx2[WRITE]);
close(fdx1[READ]);
close(fdy2[WRITE]);
close(fdy1[READ]);
/*管道发送*/
write(fdx1[WRITE],&x,sizeof(int));
write(fdy1[WRITE],&y,sizeof(int));
/*等待子进程计算*/
sleep(1);
/*管道读入*/
read(fdx2[READ],&fx,sizeof(int));
read(fdy2[READ],&fy,sizeof(int));
funxy = fx+fy;
printf("f(x) = %d\nf(y) = %d\nfun(x,y) = %d",fx,fy,funxy);
waitpid(pid_x,NULL,0);
waitpid(pid_y,NULL,0);
}
}
}
int functionx(int nx)
{
int sum = 1;
int i = 1;
if(nx < 0)
{
printf("errorx!\n");
exit(0);
}
while(i <= nx)
{
sum *=i++;
}
return sum;
}
int functiony(int ny)
{
int f1=1,f2=1,f3;
int i =3;
if(ny <= 2)
return f1;
while(i <= ny)
{
f3 = f1+f2;
f1 = f2;
f2 = f3;
i++;
}
return f3;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -