命名管道使用示例

用命名管道实现client和server端进行通信

【实现步骤】

  1. 创建两个没有关系的进程--》编写client和server源文件,并分别编译成可执行程序;
  2. 创建命名管道文件,用函数int mkfifo(const char *filename,mode_t mode);
  3. client端以写的方式打开管道文件,server端以读的方式打开管道文件
  4. 进行相应的通信--》我们实现server要接受到client发送的信息(同步)

 client.cc代码实现

#include<iostream>
#include<string>
#include<cstring>
#include<cassert>
#include<vector>using std::cout;
using std::endl;
using std::cin;#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>#include"comm.hpp"//用户端,用来写int main()
{//1. 以写方式打开管道文件int wfd=open(fifoname.c_str(),O_WRONLY);assert(wfd!=-1);(void)wfd;//2. 开始进程间通信,将用户的输入的信息写给服务端char buffer[NUM]={0};while(true){//2.1 换行控制服务端的信息同步// cout<<"请输入你的信息#";// char* msg=fgets(buffer,sizeof(buffer)-1,stdin);// assert(msg!=nullptr);// (void)msg;// msg[strlen(msg)-1]=0;// int n=write(wfd,msg,strlen(msg));// assert(n>0);// (void)n;//2.2 实现服务端和用户端输入的信息同步system("stty raw");int c = getchar();system("stty -raw");int n=write(wfd,(char*)&c,sizeof(char));assert(n>0);(void)n;}close(wfd);return 0;
}

server.cc代码实现

#include<iostream>
#include<string>
#include<cstring>
#include<cassert>
#include<vector>using std::cout;
using std::endl;
using std::cin;#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>#include"comm.hpp"//服务端,进行读
int main()
{//1. 创建管道文件int ret=mkfifo(fifoname.c_str(),mode);assert(ret==0);(void)ret;cout<<"创建管道文件成功"<<endl;//2. 打开管道文件int rfd=open(fifoname.c_str(),O_RDONLY);assert(rfd!=-1);(void)rfd;cout<<"以读方式打开管道文件成功"<<endl;//3.开始通信,接受客户端传来的信息char buffer[NUM]={0};while(true){int n=read(rfd,buffer,sizeof(buffer)-1);if(n>0){buffer[n]=0;//cout<<"client#"<<buffer<<endl;printf("%c",buffer[0]);fflush(stdout);}else if(n==0){cout<<"client quit,me too"<<endl;break;}else{perror("read error:");break;}}ret=unlink(fifoname.c_str());assert(ret==0);(void)ret;cout<<"删除管道文件成功"<<endl;close(rfd);cout<<"关闭读端管道文件成功"<<endl;sleep(2);return 0;
}

makefile文件

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/17591.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

15、Java中的异常体系

Java中的所有异常都来自顶级父类ThrowableThrowable下有两个子类Exception和ErrorError是程序无法处理的错误&#xff0c;一旦出现这个错误&#xff0c;则程序将被迫停止运行Exception不会导致程序停止&#xff0c;又分为两个部分RunTimeException运行时异常和CheckedException…

【微信小程序创作之路】- 小程序中WXML、JS、JSON、WXSS作用

【微信小程序创作之路】- 小程序中WXML、JS、JSON、WXSS作用 第三章 微信小程序WXML、JS、JSON、WXSS作用 文章目录 【微信小程序创作之路】- 小程序中WXML、JS、JSON、WXSS作用前言一、WXML是什么&#xff1f;二、JS是什么&#xff1f;三、JSON是什么&#xff1f;四、WXSS是什…

漫谈大数据时代的个人信息安全(一)——“按图索骥”

大数据时代的个人信息安全系列——“按图索骥” 一、寻找王珞丹二、啥是Exif &#xff1f;三、个人信息保护小贴士 近日&#xff0c;某高校毕业生在校期间窃取学校内网数据&#xff0c;收集全校学生个人隐私信息的新闻引发了人们对大数据时代个人信息安全问题的再度关注。在大数…

计算机体系结构基础知识介绍之缓存性能的十大进阶优化之减少命中时间和流水线访问和多组缓存增加带宽(三)

优化二&#xff1a;减少命中时间的方式预测 路预测是一种高速缓存优化技术&#xff0c;它在高速缓存中保存额外的位来预测下一次高速缓存访问的路&#xff08;或者组内的块&#xff09;。这种预测可以提前设置多路选择器来选择期望的块&#xff0c;并且在那个时钟周期内&#…

Azure Kinect 之 Note(一)

Azure Kinect Azure Kinect DK 是一款开发人员工具包&#xff0c;配有先进的AI 传感器&#xff0c;提供复杂的计算机视觉和语音模型。 Kinect 将深度传感器、空间麦克风阵列与视频摄像头和方向传感器整合成一体式的小型设备&#xff0c;提供多种模式、选项和软件开发工具包(S…

「网络编程」应用层协议_ HTTP协议学习及深入理解

「前言」文章内容大致是应用层协议的HTTP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 俗话说&#xff0c;开弓没有回头箭&#xff0c;唯有箭折、箭落、箭中靶子三种结果而已。 ——江晓英《苏东坡&#xf…

diffusion model(四)文生图diffusion model(classifier-free guided)

文章目录 系列阅读 文生图diffusion model&#xff08;classifier-free guided&#xff09;背景方法大意模型如何融入类别信息&#xff08;或语义信息&#xff09;采用交叉注意力机制融入基于channel-wise attention融入 如何训练 ϵ θ ( x t , y , t ) \epsilon_{\theta}(x_t…

React 之 CSS编写方式

一、概述 整个前端已经是组件化的天下&#xff0c;而CSS的设计就不是为组件化而生的&#xff0c;所以在目前组件化的框架中都在需要一种合适的CSS解决方案 在组件化中选择合适的CSS解决方案应该符合以下条件&#xff1a; 可以编写局部css&#xff1a;css具备自己的具备作用域&a…

静态路由介绍

目录 静态路由配置方法&#xff08;基本配置&#xff09;&#xff1a; 静态路由的拓展配置 负载均衡 1.环回接口——测试 2.手工汇总——子网汇总 3.路由黑洞&#xff08;黑洞路由) 4.缺省路由 5.空接口——NULL 0 6.浮动静态路由 静态路由配置方法&#xff08;基本配置&#x…

Spark---第 1 章 Spark 内核概述

Spark 内核泛指 Spark 的核心运行机制&#xff0c;包括 Spark 核心组件的运行机制、Spark 任务调度机制、Spark 内存管理机制、Spark 核心功能的运行原理等&#xff0c;熟练掌握 Spark 内核原理&#xff0c;能够帮助我们更好地完成 Spark 代码设计&#xff0c;并能够帮助我们准…

python车牌识别

识别结果 蓝牌 绿牌 黄牌 环境 python:3.9\opencv:4.5.1 环境安装 pip3 install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple pip3 install hyperlpr -i https://pypi.tuna.tsinghua.edu.cn/simple 修改 cd /Library/Frameworks/Python.framework/Versi…

14、双亲委托模型

双亲委托模型 先直接来看一幅图 双亲委派模型的好处&#xff1a; 主要是为了安全性&#xff0c;避免用户自己编写的类动态替换Java的一些核心类&#xff0c;比如 String。 同时也避免了类的重复加载&#xff0c;因为JVM中区分不同类&#xff0c;不仅仅是根据类名&#xff0c…