IO_DAY7

1:实现2个终端之间的互相聊天
要求:千万不要做出来2个终端之间的消息发送是读一写的,一定要能够做到,一个终端发送n条消息,另一个终端一条消息都不回复都是没有问题的

终端A:

#include<myhead.h>
int main(int argc, char *argv[])
{
	int var=fork();
	if(var>0)
	{
		char afifo[32]="./afifo";
		int res=access(afifo,F_OK);
		if(res==-1)
		{
			mkfifo(afifo,0666);
		}
		int afd=open(afifo,O_WRONLY|O_TRUNC);
		char abuf[128]={0};
		int alen=0;
		while(1)
		{
			memset(abuf,0,alen);
			scanf("%128s",abuf);
			while(getchar()!=10);
			alen=strlen(abuf);
			write(afd,abuf,alen);
		}
		close(afd);
	}else if(var==0)
	{	
		char bfifo[32]="./bfifo";
		if(access(bfifo,F_OK)==-1)
		{
			mkfifo(bfifo,0666);
		}
		int bfd=open(bfifo,O_RDONLY);
		char bbuf[128]={0};
		int blen=0;
		while(1)
		{
			memset(bbuf,0,blen);
			blen=read(bfd,bbuf,128);
			printf("B:%s\n",bbuf);
		}
		close(bfd);


	}else if(var<0)
	{
		perror("fork");
		return 1;
	}
	return 0;
}
ubuntu@ub

终端B:

#include<myhead.h>
int main(int argc, char *argv[])
{
	int var=fork();
	if(var>0)
	{
	char afifo[32]="./afifo";
	if(access(afifo,F_OK)==-1)
	{
		mkfifo(afifo,0666);
	}
	int afd=open(afifo,O_RDONLY);
	char abuf[128]={0};
	int alen=0;
	while(1)
	{
		memset(abuf,0,alen);
		alen=read(afd,abuf,128);
		printf("A:%s\n",abuf);
	}
	close(afd);
	}else if(var==0)
	{
		char bfifo[32]="./bfifo";
		int res=access(bfifo,F_OK);
		if(res==-1)
		{
			mkfifo(bfifo,0666);
		}
		int bfd=open(bfifo,O_WRONLY|O_TRUNC);
		char bbuf[128]={0};
		int blen=0;
		while(1)
		{
			memset(bbuf,0,blen);
			scanf("%128s",bbuf);
			while(getchar()!=10);
			blen=strlen(bbuf);
			write(bfd,bbuf,blen);
		}
		close(bfd);

	}else if(var==-1)
	{
		perror("fork");
		return 1;
	}
      return 0;
}

效果图:

2:有2个.c文件1.c,2.c
1.c的代码负责:从键盘输入三角形的三边长 或者 长方形的长和宽

2.c的代码负责:根据1.c 输入的数据,计算三角形 或者 长方形的面积

1.c:

#include<myhead.h>
int main(int argc, char *argv[])
{
	int pipefd[2]={0};
	pipe(pipefd);
	//pipefd[0]=3
	//pipefd[1]=4;
	int res=fork();
	if(res>0)
	{
		while(1)
		{
			double data[3]={0};
			printf("请输入三角形的三边长或者长方形的长和宽:");
			scanf("%lf %lf %lf",data,data+1,data+2);
			while(getchar()!=10);
			write(pipefd[1],data,24);
			sleep(1);
		}
	}else if(res==0)
	{
		char rfd[4]={0};
		sprintf(rfd,"%d",pipefd[0]);
		execl("./2","2",rfd,NULL);
		perror("execl");
	}
      return 0;
}

2.c:

#include<myhead.h>
int main(int argc, char *argv[])
{
	double buf[3]={0};
	double area=0;

	int rfd=atoi(argv[1]);
	while(1)
	{
		read(rfd,buf,24);
		if(buf[0]!=0&&buf[1]!=0&&buf[2]!=0)
		{
			double a=buf[0];
			double b=buf[1];
			double c=buf[2];
			double p=(a+b+c)/2;
			double q=p*(p-a)*(p-b)*(p-c);
			area=sqrt(q);
			printf("三角形面积为:%f\n",area);
		}else if(buf[0]==0)
		{
			area=buf[1]*buf[2];
			printf("长方形面积为:%f\n",area);
		}else if(buf[1]==0)
		{
			area=buf[0]*buf[2];
			printf("长方形面积为:%f\n",area);
		}else if(buf[2]==0)
		{
			area=buf[1]*buf[0];
			printf("长方形面积为:%f\n",area);
		}
	}
      return 0;
}

效果图:

思维导图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值