进程间通信之匿名管道通信

每一次的努力都是自我成长的一步,坚持不懈的付出会铺就通向成功的道路。

文章目录

  • 进程间通信的介绍
  • 进程间通信的发展
  • 进程间通信的分类
  • 进程间通讯的本质
    • 资源?
    • 这个资源谁提供的?
  • 管道
    • 什么是管道
    • 匿名管道
    • 管道小总结
    • 现在我给大家看一下管道通信的一个实列

进程间通信的介绍

数据传输:一个进程需要将它的数据发送给另一个进程
资源共享:多个进程之间共享同样的资源。
通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止
时要通知父进程)。
进程控制:有些进程希望完全控制另一个进程的执行(如Debug进程),此时控制进程希望能够拦截另
一个进程的所有陷入和异常,并能够及时知道它的状态改变。

进程间通信的发展

1、管道
2、System V进程间通信
3、POSIX进程间通信

进程间通信的分类

管道

匿名管道pipe
命名管道

system V ipc

System V 消息队列
System V 共享内存
System V 信号量

POSIX IPC

消息队列
共享内存
信号量
互斥量
条件变量
读写锁

进程间通讯的本质

就是让不同的进程看到相同的资源

资源?

资源就是具有特定格式的内存空间

这个资源谁提供的?

一般都是操作系统,这里有抛出一个问题那就是为什么两个进程间的通讯通讯的资源确实操作系统提供的呢这是因为我们可以想一下两个进程之间是具有独立性的如果说一个资源属于某个进程但是这个资源又作为了通信时的资源那么肯定会导致,破坏了进程间的独立性

管道

什么是管道

管道是Unix中最古老的进程间通信的形式。是一种基于文件的通信方式
我们把从一个进程连接到另一个进程的一个数据流称为一个“管道”如下图
在这里插入图片描述

匿名管道

#include <unistd.h>
功能:创建一无名管道
原型
int pipe(int fd[2]);
参数
fd:文件描述符数组,其中fd[0]表示读端, fd[1]表示写端返回值:成功返回0,失败返回错误代码
在这里插入图片描述

管道小总结

进程之间利用管道进行通信其实本质上来说就是利用一个属于操作系统的一个空间进行通信要注意这个空间必须属于操作系统而不属于某个进程因此我们可以知道其实本质就是进程在访问操作系统。

现在我给大家看一下管道通信的一个实列

#include <iostream>
#include <string>
#include <unistd.h>
#include <string.h>
#include <string>
#include <cstdio>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
using namespace std;
const int n = 2;
#define NUM 1024
void Write(int wfd)
{string a = "hello I am chile";char buffer[NUM];int num = 0;while (true){buffer[0] = 0;snprintf(buffer, sizeof(buffer), "%s-%d-%d", a.c_str(), getpid(), num++);write(wfd, buffer, strlen(buffer));sleep(1);}
}
void Read(int rfd)
{char buffer[NUM];while (true){int n = read(rfd, buffer, sizeof(buffer));if (n < 0){return;}buffer[n] = 0;cout << "father get a message[" << getpid() << "]# " << buffer << endl;}
}
int main()
{int pipefd[2];int n = pipe(pipefd);if (n < 0){return 1;}pid_t pid = fork();if (pid == -1){return 2;}else if (pid == 0){close(pipefd[0]);Write(pipefd[1]);close(pipefd[1]);}close(pipefd[1]);Read(pipefd[0]);pid_t rid = waitpid(pid, NULL, 0);if (rid < 0){return 2;}close(pipefd[0]);return 0;
}

下图是运行的一个示意图
在这里插入图片描述
由于我们是死循环因此下面其实还在生成中大家可以动手操作一下。

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

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

相关文章

【openwrt】【overlayfs】Openwrt系统overlayfs挂载流程

overlayfs是一种叠加文件系统&#xff0c;在openwrt和安卓系统中都有很广泛的应用&#xff0c;overlayfs通常用于将只读根文件系统(rootfs)和可写文件系统(jffs2)进行叠加后形成一个新的文件系统&#xff0c;这个新的文件系统“看起来”是可读写的&#xff0c;这种做法的好处是…

010:vue结合el-table实现表格小计总计需求(summary-method)

文章目录 1. 实现效果2. 核心部分3. 完整组件代码4. 注意点 1. 实现效果 2. 核心部分 el-table 添加如下配置&#xff0c;添加 show-summary 属性&#xff0c;配置 summary-method 函数 <el-table.......show-summary:summary-method"getSummaries" >...... …

QuestDB时序数据库快速入门

简介 QuestDB是一个开源的高性能时序数据库&#xff0c;专门用于处理时间序列相关的数据存储与查询&#xff1b; QuestDB使用列式存储模型。数据存储在表中&#xff0c;每列存储在其自己的文件和其自己的本机格式中。新数据被附加到每列的底部&#xff0c;以便能够按照与摄取…

智能光栅光片显微成像技术的LabVIEW解决方案

智能光栅光片显微成像技术的LabVIEW解决方案 在生物医学研究中&#xff0c;高效的成像技术对于捕捉细胞内罕见和复杂事件至关重要。智能光栅光片显微技术&#xff08;smartLLSM&#xff09;的出现&#xff0c;代表了LabVIEW软件在高端成像领域的革命性应用&#xff0c;这项技术…

算法学习系列(二十四):二分图

目录 引言一、二分图二、染色法三、匈牙利算法 引言 这个二分图作为平常我是不怎么知道的&#xff0c;但是在算法竞赛中还是能用得到的。本文主要介绍了染色法&#xff1a;用来判断如否为二分图&#xff0c;匈牙利算法&#xff1a;求出二分图最大匹配数。 一、二分图 二分图…

Linux例行性工作 at和crontab命令

1&#xff0c;例行性工作 例行性工作 —— 在某一时刻&#xff0c;必须要做的事情 —— 定时任务 &#xff08;比如&#xff1a;闹钟&#xff09; 例行性工作分为两种&#xff1a;“单一的例行性工作 at”和“循环的例行性工作 crontab” 2&#xff0c;单一执行的例行性工作 …

HTML--JavaScript--引入方式

啊哈~~~基础三剑看到第三剑&#xff0c;JavaScript HTML用于控制网页结构 CSS用于控制网页的外观 JavaScript用于控制网页的行为 JavaScript引入方式 引入的三种方式&#xff1a; 外部JavaScript 内部JavaScript 元素事件JavaScript 引入外部JavaScript 一般情况下网页最好…

真假转换之间 tr

文章目录 真假转换之间 tra-z小写全部转换为大写A-Z大写全部转换为小写貌似起名可以用这个移除文件中的所有空格更多信息 真假转换之间 tr Linux tr 命令用于转换或删除字符。 tr 命令可以从标准输入读取数据&#xff0c;经过字符串转译后&#xff0c;将结果输出到标准输出。…

AGV小车磁导航传感器CNS-MGS-080N磁条布置方法

AGV小车磁导航传感器CNS-MGS-080N通过检测磁场信号强度&#xff0c;来判断此磁条相对于传感器位置。CNS-MGS-080N传感器使用8个点检测信号&#xff0c;模拟16点传感器信号进行输出。 本文重点介绍AGV小车磁导航传感器CNS-MGS-080N磁条布置方法。 1、 磁条规格 磁条型号 CNS-M…

京东数据分析-2023年度大家电行业数据分析(含空调、冰箱、洗衣机、平板电视品类)

2023年度&#xff0c;京东平台上大家电市场的需求疲软&#xff0c;行业整体销售呈下滑趋势。 根据鲸参谋电商数据分析平台的相关数据显示&#xff0c;2023年大家电行业大盘的销量累计约为6100万&#xff0c;同比下滑约15%&#xff1b;年度销额累计1400亿&#xff0c;同比下滑约…

【ELK 学习】ElasticSearch

ELK&#xff1a;ElasticSearch存储&#xff0c;Logstash收集&#xff0c;Kibana展示 版本较多&#xff0c;使用时需要版本匹配&#xff0c;还需要和mysql版本匹配&#xff08;elastic官网给了版本对应关系&#xff09; 本次使用的版本es6.8.12 filebeat 轻量级的数据收集工具 …

设计模式——1_5 享元(Flyweight)

今人不见古时月&#xff0c;今月曾经照古人 ——李白 文章目录 定义图纸一个例子&#xff1a;可以复用的样式表绘制表格降本增效&#xff1f;第一步&#xff0c;先分析 变化和不变的地方第二步&#xff0c;把变化和不变的地方拆开来第三步&#xff1a;有没有办法共享这些内容完…