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

📄 pipe_to_tram.c

📁 基于linux的系统编程程序
💻 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 + -