Linux--进程间的通信-命名管道

前文:
Linux–进程间的通信-匿名管道
Linux–进程间的通信–进程池

命名管道的概念

命名管道是一种进程间通信(IPC)机制,运行不同进程之间进行可靠的、单向或双向的数据通信

特点和作用:

  1. 跨平台性:在WIndows和Linux系统中都有实现,因此具有良好的跨平台性。
  2. 简单易用: 使用命名管道进行通信相对简单。
  3. 安全性:命名管道充分利用了操作系统提供的安全特性,如WIndows的访问控制列表(ACL),从而确保通信的安全性。

命名管道的模拟实现

在这里插入图片描述
mkfifo是用于创建命名管道的命令,它的作用是在文件系统中创建一个特殊类型的文件,该文件可被多个进程用于进程间的通信。

在这里插入图片描述
这是mkfifo函数。

代码

Comm.hpp: 这里面包含了一个有关命名管道的类,包括管道的创建和销毁。

#ifndef __COMM_HPP__
#define __COMM_HPP__#include<iostream>
#include<string>
#include<cstring>
#include<cerrno>
#include<sys/types.h>
#include<sys/stat.h>
#include<unistd.h>
#include<fcntl.h>using namespace std;#define Mode 0666
#define Path "./fifo"class fifo
{
public:fifo(const string & path):_path(path){umask(0);int n=mkfifo(_path.c_str(),Mode);if(n==0){cout<< "mkfifo success" << endl;}else{cerr << "mkfifo failed, errno: " << errno << ", errstring: " << strerror(errno) << endl;}}~fifo(){int n=unlink(_path.c_str());if (n == 0){cout << "remove fifo file " << _path << " success" << endl;}else{cerr << "remove failed, errno: " << errno << ", errstring: " << strerror(errno) << endl;}}
private:string _path; //文件路径
};#endif

PipeCilent.cc: 这是客户端(写端),将数据写入到命名管道文件;

#include"Comm.hpp"int main()
{int wfd=open(Path,O_WRONLY);if(wfd<0){cerr << "open failed, errno: " << errno << ", errstring: " << strerror(errno) << endl;return 1;}string inbuffer;while(true){cout<<"Please Enter Your Message# ";getline(cin,inbuffer);if(inbuffer=="quit") break;ssize_t n=write(wfd,inbuffer.c_str(),inbuffer.size());if(n<0){cerr << "write failed, errno: " << errno << ", errstring: " << strerror(errno) << endl;break;}}close(wfd);return 0;
}

PipeServer.cc: 服务端(读端),需要对管道创建一个对象,读取管道中的内容。

#include "Comm.hpp"
#include<unistd.h>int main()
{fifo ff(Path);int rfd=open(Path,O_RDONLY);if(rfd<0){cerr << "open failed, errno: " << errno << ", errstring: " << strerror(errno) << endl;return 1;}//如果写端没有打开,那么open函数会受到阻塞,相当于命名管道与写端没有通信,//open函数打开管道文件后如果没有连接写端就会等待cout<<"open success"<<endl;char buffer[1024];while(true){ssize_t n=read(rfd,buffer,sizeof(buffer)-1);if(n>0){buffer[n]=0;cout << "client say : " << buffer << endl;}else if(n==0){cout << "client quit, me too!!" << endl;break;}else{cerr << "read failed, errno: " << errno << ", errstring: " << strerror(errno) << endl;break;}}close(rfd);return 0;
}

解释

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

命名管道和匿名管道的区别:
匿名管道主要用于有血缘关系的进程间的通信,无法用于两个没有联系的进程而命名管道可以在文件系统中通过路径名来进行使用;并且命名管道开辟的管道本质是一个文件,相对于匿名管道,管道空间比较大;创建方式不同:通过调用不同的系统调用来进行创建;所在位置不同:匿名管道会在内存中创建,而命名管道会在文件系统中创建;

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

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

相关文章

ResNet最新变体!性能反超Transformer,模型准确率达98.42%

目前ResNet&#xff08;残差网络&#xff09;有两大主流创新思路&#xff1a;一是与其他技术或模型结合&#xff0c;比如前文讲到的ResNetTransformer&#xff1b;二是在原始设计的基础上进行改进。 尽管ResNet通过残差学习有效改善了深层网络的训练和性能&#xff0c;但同时它…

永磁同步电机无感FOC(扩展卡尔曼滤波EKF位置观测控制)

文章目录 1、前言2、扩展卡尔曼滤波器原理2.1 预测阶段&#xff08;时间更新阶段&#xff09;2.2 校正阶段&#xff08;状态更新阶段&#xff09; 3、永磁同步电机EKF的模型4、永磁同步电机EKF的无位置状态观测仿真4.1 核心模块&#xff08;在滑膜、龙伯格、磁链等观测器基础上…

三角洲期刊投稿发表论文

《三角洲》杂志是由国家新闻出版总署批准&#xff0c;南通市委宣传部主管&#xff0c;南通日报社、南通市文学艺术界联合会主办的正规文学类期刊。适用于发表高品质文学学术作品&#xff0c;科研机构的专家学者以及高等院校的师生等具有原创性的学术理论、工作实践、科研成果和…

openEuler-23.03下载

下载地址&#xff1a;openEuler下载 | 欧拉系统ISO镜像 | openEuler社区官网 下载版本&#xff1a;openEuler-23.03-x86_64-dvd.iso

H264标准协议基础3

参考博文 上一篇H264标准协议基础2 1.解码视频帧的poc计算 2.残差4x4 矩阵中的trailingones & numcoeff 2.1查表 trailingones 表达出尾部one(1,-1)系数的个数,按照zigzag扫描出(1,-1)个数,trailingones的最大为3; numcoeff 表达非零值系数的个数,最多为16个…

Linux shell 脚本基础与部署SpringCloud实战

博主介绍&#xff1a;✌全网粉丝5W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

供应链投毒预警 | 开源供应链投毒202403月报发布啦!(含投毒案例分析)

悬镜供应链安全情报中心通过持续监测全网主流开源软件仓库&#xff0c;结合程序动静态分析方式对潜在风险的开源组件包进行动态跟踪和捕获&#xff0c;能够第一时间捕获开源组件仓库中的恶意投毒攻击。在2024年3月份&#xff0c;悬镜供应链安全情报中心在NPM官方仓库&#xff0…

Flattened Butterfly 扁平蝶形拓扑

Flattened Butterfly 扁平蝶形拓扑 1. 传统蝶形网络 Butterfly Topology2. 扁平蝶形拓扑 Flattened Butterfly3.On-Chip Flattened Butterfly 扁平蝶形拓扑应用于片上网络 Flattened Butterfly 扁平蝶形拓扑 扁平蝶形拓扑是一种经济高效的拓扑&#xff0c;适用于高基数路由器…

OpenHarmony南向开发案例:【智能照相机】

样例简介 本Demo是基于Hi3516开发板&#xff0c;使用OpenHarmony3.0-LTS开发的应用。通过获取摄像头数据&#xff0c;实现预览拍照以及路视频等功能。并且通过后台AI服务识别唤醒词来进行语音控制拍照及录制视频。 应用运行效果图&#xff1a; 此为相机的预览界面。 样例原理…

OpenHarmony多媒体-ohos_videocompressor

介绍 videoCompressor是一款ohos高性能视频压缩器。 目前实现的能力&#xff1a; 支持视频压缩 使用本工程 有两种方式可以下载本工程&#xff1a; 开发者如果想要使用本工程,可以使用git命令 git clone https://gitee.com/openharmony-sig/ohos_videocompressor.git --…

推荐一款免费虚拟主机,小编亲测好用!

虚拟主机是一种将物理服务器分割成多个虚拟服务器的技术&#xff0c;每个虚拟服务器都具有独立的操作系统和资源。相较于独立服务器&#xff0c;虚拟主机具有较低的成本和维护难度&#xff0c;因此受到了许多个人和小型企业的青睐。本文将为大家推荐一款免费且性能优秀的虚拟主…

鸿蒙入门05-真机运行“遥遥领先”

如果你有一台真的 "遥遥领先"那么是可以直接在手机上真机运行你的项目的我们也来尝试一下运行 一、手机设置开发者模式 打开手机设置 打开手机设置界面 向下滑动到关于手机位置 快速连续点击版本号位置 下图所示位置快速连续点击 打开 3 - 5 次即可 会提示您已经进…

跨境电商MercadoLibre(美客多)平台预约号操作流程自动化系统

目录 一、前置配置准备 1. 安装Chrome插件 2. 添加预约配置 二、开始使用 MercadoLibre&#xff08;美客多&#xff09;于2021年10月18号上线了新预约入仓系统&#xff0c;在MercadoLibre美客多平台上&#xff0c;新入仓预约系统是一项非常重要的功能&#xff0c;它可以帮助…

每日两题 / 53. 最大子数组和 56. 合并区间(LeetCode热题100)

53. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; 经典dp题&#xff0c;dp[i]表示以nums[i]为结尾的所有子数组中&#xff0c;最大的和 将i从左到右遍历&#xff0c;考虑dp[i]如何维护&#xff1f; 以nums[i]结尾的子数组只有两种情况&#xff0c;子数组只有nums[i]…

【Lattice FPGA 开发】Diamond的使用

文章目录 Diamond的使用教程界面器件查看与更改管脚分配RTL分析图查看 第三方工具关联Notepad 问题与解决管脚被分类到unconnected&#xff0c;导致无法分配管脚 Diamond的使用教程 【Lattice FPGA 开发】Diamond的工程建立、文件输入、ip核配置、管脚配置、综合及布线以及下载…

2024年五一杯数学建模B题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

Unity类银河恶魔城学习记录12-17 p139 In game UI源代码

Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili UI.cs using UnityEngine;public class UI : MonoBehaviour {[SerializeFie…

移远通信:立足5G RedCap新质生产力,全力推动智能电网创新发展

随着全球能源结构的转型和电力需求的持续增长&#xff0c;智能电网产业迎来了新的发展机遇。而物联网、大数据等前沿技术的创新和应用&#xff0c;正在为电力行业的发展注入强劲的新质生产力。 4月9日&#xff0c;第四十八届中国电工仪器仪表产业发展技术研讨及展会在杭州拉开帷…

第二部分 Python提高—GUI图形用户界面编程(三)

简单组件学习 Radiobutton 单选按钮、Checkbutton 复选按钮和canvas 画布 文章目录 Radiobutton 单选按钮Checkbutton 复选按钮canvas 画布 Radiobutton 单选按钮 Radiobutton 控件用于选择同一组单选按钮中的一个。Radiobutton 可以显示文本&#xff0c;也可以显示图像。 f…

当下AI驱动下的广告营销,是一个“领先的落后行业” | 第八届社交媒体风向大会

内容创作者调研显示&#xff1a;AI渗透率竟不足两成&#xff1f; 人类是智能化发展的缔造者&#xff0c;也是前行的绊脚石&#xff1f; 为什么说广告营销行业是“领先的落后行业”? 针对AI浪潮下社交媒体领域的发展&#xff0c;4月15日的风向大会上&#xff0c;微播易创始人…