如何科学养一只鸽子为你飞鸽传书——程序间异步通信_莫韵乐的Linux英雄传

如何科学养一只鸽子为你飞鸽传书——程序间异步通信

程序间异步通信——其本质都只是将信息从A端到B端的传递,只要通信双方都做好发出信息和接收信息的准备就可以实现飞鸽传书

接下来看一下怎样如何科学养一只鸽子为你飞鸽传书
鸽子是个啥?(什么是有名管道)
头文件#include<sys/types.h>
#include<sys/stat.h>
原型int mkfifo(const char *pathname, mode_t mode)
功能创建有名管道
参数pathname: 有名管道文件的路径名
mode:管道文件访问权限
返回值成功:返回管道文件描述符
失败:-1
备注FIFO文件的数据始终存储在内存中,关闭FIFO文件后,数据清空,故大小始终为0
怎么科学养鸽子?(如何创建有名管道)
创建有名管道的两种方法在命令行创建:mkfifo -m [权限] [管道名]
在程序中调用库函数:mkfifo(“[管道名]”, [权限]);
如何进行飞鸽传书?(如何在程序里面使用有名管道)
把鸽子从笼子拿出来(头文件)

要使用有名管道必须添加以下库文件,其他库文件酌情添加(总觉得好像在说调味料)

	#include<sys/types.h>
	#include<sys/stat.h>
给鸽子起个名字(确定FIFO的名字和权限)

在程序中调用mkfifo函数:mkfifo(“[管道名]”, [权限]);

	mkfifo("rw_fifo",0777);
让鸽子起飞(打开管道文件)

跟我们平时打开文件的方法是一样的,这里我们使用可读写方式打开

	fd=open("rw_fifo",O_RDWR);
让鸽子送信(将数据写入管道文件)

fd决定了那一只鸽子去送信
wbuf决定了信的内容
20表示信的大小

	write(fd,wbuf,20);
从鸽子上把信拿出来(从管道文件读出数据)

fd决定了那一只鸽子去送信
rbuf用来抄录fifo文件里面的内容
20表示表示要抄多少下来

	read(fd,rbuf,20);
将鸽子关回笼子里(关闭管道文件)

这里就相当简单了,普通的文件我普通地关

	close(fd);
接下来我们就开始编写一个使用实现程序间异步通讯的例子

想要实现来回送信,我们就需要用到两只鸽子,那么我们就开始写吧!

首先找到鸽子笼
	#include <fcntl.h>
	#include <sys/types.h>
	#include <sys/stat.h>
	#include <stdlib.h>
	#include <unistd.h>
	#include <stdio.h>
然后准备好书信
	char wbuf[20];
	char rbuf[20];
如何写信(多种方法)
	wbuf = "hello.A";//定义字符串
	fgets(wbuf,20,stdin);//从屏幕输入
	read(fd_file,wbuf,20);//从文件中读取
给两个鸽子起个名字
	mkfifo("1w2rfifo",0777);
	mkfifo("1r2wfifo",0777);
让鸽子起飞
	int fd[2];
	if( (fd[0]=open("1w2rfifo",O_RDWR)) <0)
	{
		perror("wfifo打开失败");
		exit(1);
	}
	if( (fd[1]=open("1r2wfifo",O_RDWR)) <0)
	{
		perror("rfifo打开失败");
		exit(1);
	}
如何将信放进去,把信拿出来
	write(fd[0],wbuf,20);//将信放进去
	read(fd[1],rbuf,20);//把信拿出来
让鸽子996般地不断来回送信

while里面增设退出条件,尽可能地考虑通信双方是否能同时退出程序

	while(*wbuf != 'q' || *rbuf != 'q'){//q为退出信息
		/*代码实现*/
	}
如何报信(多种方法)
	fputs(rbuf,stdout);//输出到屏幕
	write(fd_file,rbuf,20);//输出到文件
	printf(rbuf);//打印输出到屏幕
在最后,将鸽子关回笼子里
	close(fd[0]);
	close(fd[1]);

以下是程序的效果:
A端发送信息,B端接收,接着B端发信息,A端接收
当A端输入退出信息q时,B端收到了q,然后B端将退出信息q发送回去后,A接收到q的信息,两个程序同时退出。
在这里插入图片描述

如果觉得这篇文章还不错的话,就点个赞收藏分享一下,感谢您的观看

看完实现异步通信,不妨再来看看底层I/O操作和标准I/O操作吧!

文件底层I/O基本操作——东写西读南开北关中位移_莫韵乐的Linux英雄传
文件标准I/O基本操作——FX乐曲时代_莫韵乐的Linux英雄传

  • 9
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值