Linux进程间通信(1)

news2025/7/18 12:01:34

1.IPC

1.什么是IPC?

Inter Process Communication


2.进程间通信常用的几种方式

1,管道通信:有名管道,无名管道
2,信号- 系统开销小
3,消息队列-内核的链表
4,信号量-计数器
5,共享内存
6,内存映射
7,套接字

2.无名管道

1.管道的概念  

本质
内核缓冲区
伪文件-不占用磁盘空间
特点:
两部分:
        读端,写端,对应两个文件描述符
        数据写端流入,读端流出
操作管理的进程被销毁之后,管道自动被释放
管道默认是阻塞的

2.管道的原理   pipe

内部实现方式:队列
       环形队列
       特点:先进先出
缓冲区大小
        默认4K
        大小会根据实际情况做适当调整

3.管道的局限性

队列:
      数据只能读取一次,不能重复读取
半双工:
      单工:遥控器
      半双工:对讲机     数据传输方向是单向的

      双工:电话

匿名管道

         适用于有血缘关心的进程    (父子进程)


 4.创建匿名管道

int pipe(int fd[2])
fd‐传出参数:
           fd[0]‐读端
           fd[1]‐写端
返回值:
       0:成功
      ‐1:创建失败

为什么是3和4呢?

看之前的linux标准文件描述符,它是按着顺序排列的,所以3是读端、4是写端

                                                             图一

5.父子进程使用管道通信

先创建管道再创建父子进程

父/子进程在读的时候,其写端要关闭

实现 ps aux| grep "bash" (终端)
数据重定向:dup2   

由图一知道:要重定向是因为默认是写到屏幕的,我们要改成写到管道里

6.管道的读写行为

读操作
         有数据
             read(fd[1]) 正常读,返回读出的字节数
         无数据
            写端被全部关闭,read返回0,相当于读文件到了尾部
            没有全部关闭
            read阻塞
写操作
        读端全部关闭
                  管道破裂,进程被终止
                               内核给当前进程发送信号SIGPIPE-13,默认处理动作
        读端没全部关闭
                  缓冲区写满了
                               write阻塞
                  缓冲区没满
                              write继续写,直到写满,阻塞
如何设置非阻塞?
                 默认读写两端都阻塞
                设置读端为非阻塞pipe(fd)
                      fcntl-变参函数
                              复制文件描述符-dup
                              修改文件属性-open的时候对应flag属性
                     设置方法     

//获取原来的flags
int flags = fcntl(fd[0],F+GETFL);
//设置新的flags
flag |=O_NONBLOCK;
fcntl(fd[0],F_SETFL,flags);
fcntl(fd[0],F_SETFL,flags);


 

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

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

相关文章

Scala相关知识学习总结3

包 - 包声明:和Java类似,作用是区分同名类、管理类命名空间。Scala包名只能含数字、字母等,不能数字开头、不能用关键字。 - 包说明:有类似Java的包管理风格,也有独特嵌套风格。嵌套风格有两个特点,一是&…

Opencv计算机视觉编程攻略-第七节 提取直线、轮廓和区域

第七节 提取直线、轮廓和区域 1.用Canny 算子检测图像轮廓2.用霍夫变换检测直线;3.点集的直线拟合4.提取连续区域5.计算区域的形状描述子 图像的边缘区域勾画出了图像含有重要的视觉信息。正因如此,边缘可应用于目标识别等领域。但是简单的二值边缘分布图…

中和农信:让金融“活水”精准浇灌乡村沃土

2025年政府工作报告首提“投资于人”概念,并22次提及“金融”,强调要着力抓好“三农”工作,深入推进乡村全面振兴;一体推进地方中小金融机构风险处置和转型发展;扎扎实实落实促进民营经济发展的政策措施,切…

背包DP总结

牛客周赛 Round 81 E.建筑入门 知识点:完全背包,完全背包的路径转移以及回溯 由题意可以推导出,下层麻将的数字一定大于上层数字,所以我们可以假设一个最基础的麻将塔,也就是: 1 2 2 3 3 3 … 形如这样的&…

Labview信号采集与多功能分析系统(可仿真)

1.摘要 《Labview信号采集与多功能分析系统》可以实时分析信号的时域特征,例如信号的均值、方差、峰值、峭度等。系统可以进行信号的自相关与互关分析。此系统也可以分析信号的频域特征,包括快速傅里叶变换后的时频特征、短时傅里叶变换STFT后的时频域特…

【电子通识】为什么电子元件的规格书常常要看英文版本

在我们查看电子器件规格书的时候,如果有中文版本和英文版本两种供我们选择,那我们常常需要查看英文版本,大家有想过这是为什么吗? 为什么英文规格书很重要? 电子元件规格书(Datasheet)常以英文版…

Scala基础知识5

面向对象 Scala 的面向对象思想和 Java 的面向对象思想和概念是一致的。 Scala 中语法和 Java 不同,补充了更多的功能。 1.Scala包 基本语法:package 包名 Scala 包的三大作用(和 Java 一样) 1.区分相同名字的类。 2.当类很多…

【图像处理基石】什么是RAW格式?

在图像处理中,RAW格式是一种未经处理、记录了相机传感器原始数据的图像文件格式。它保留了相机传感器捕捉到的全部原始信息,未经任何压缩或处理,因此被称为“原始数据”(Raw)。以下是关于RAW格式的详细解释&#xff1a…

AI Agent 实战:搭建个人在线旅游助手

AI Agent 实战:搭建个人在线旅游助手 本次实验中,我们将继续探索 Agent 的提示词,学习更加规范的提示词撰写方法。 本实验中你将掌握的知识点 使用 Dify 构建 Agent 的方法结构化的提示词撰写技巧变量的使用方法 1. 准备 在新建 Agent 之…

【JavaScript】十四、轮播图

文章目录 实现一个轮播图&#xff0c;功能点包括&#xff1a; 自动播放鼠标经过暂时播放鼠标离开继续播放点击切换按钮手动切换 div盒子嵌套先写出静态HTML&#xff0c;再使用JS来修改样式和数据&#xff0c;渲染页面&#xff1a; <!DOCTYPE html> <html lang"…

2025 全球音乐 AI 大模型对决:技术革新引领商业变革浪潮

未来的世界声音&#xff1a; 音乐产业如今正被 AI 技术推动着&#xff0c;开启一场智能革命的全新篇章。无论是旋律的诞生&#xff0c;还是工业化编曲的流程&#xff0c;AI 大模型都在以飞快的速度改变着行业的基本逻辑架构。在中国&#xff0c;昆仑万维依靠 Mureka 系列产品在…

RabbitMQ详解,RabbitMQ是什么?架构是怎样的?

目录 一,RabbitMQ是什么? 二,RabbitMQ架构 2.1 首先我们来看下RabbitMQ里面的心概念Queue是什么? 2.2 交换器Exchange 2.3 RabbitMQ是什么? 2.4 重点看下优先级队列是什么? 三,RabbitMQ集群 3.1 普通集群模式 3.2 镜像队列集群 一,RabbitMQ是什么? 假设我们程序…

Java 大视界 -- Java 大数据在智能教育自适应学习平台中的用户行为分析与个性化推荐(169)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

智能打印预约系统:微信小程序+SSM框架实战项目

微信小程序打印室预约系统&#xff0c;采用SSM&#xff08;SpringSpringMVCMyBatis&#xff09;经典框架组合。 一、系统核心功能详解 1. 智能化管理后台 ​用户数据看板​打印店资源管理​预约动态监控​服务评价系统 2. 微信小程序端 ​智能定位服务​预约时段选择​文件…

Redisson 操作 Redis Stream 消息队列详解及实战案例

目录 一、Redis Stream 概念 1.Redis消息队列-认识消息队列 2.Redis Stream特点 3.Redis Stream与RabbitMQ等消息队列的比较 二.Redis Stream基本操作命令 1.生产消息 2.消费消息 3.消费者组操作 4.确认消息处理 三、Redisson 操作 Stream 的核心 API 1. 获取流的API…

【深度学习量化交易19】行情数据获取方式比测(1)——基于miniQMT的量化交易回测系统开发实记

我是Mr.看海&#xff0c;我在尝试用信号处理的知识积累和思考方式做量化交易&#xff0c;应用深度学习和AI实现股票自动交易&#xff0c;目的是实现财务自由~ 目前我正在开发基于miniQMT的量化交易系统——看海量化交易系统。 经常使用MiniQMT的朋友都知道&#xff0c;xtquant的…

23种设计模式-结构型模式-代理

文章目录 简介问题解决方案代码核心设计要点 总结 简介 代理是一种结构型设计模式&#xff0c;让你能够提供对象的替代品或其占位符。代理控制着对于原对象的访问&#xff0c;并允许在把请求提交给对象前后进行一些处理。 问题 为什么要控制对于某个对象的访问呢&#xff1f…

Windows C++ 排查死锁

开发出来应用程序突然间卡死不动&#xff0c;如果其中是因为死锁问题卡列该如何排查 下面是一个简单的死锁例子 #include <iostream> #include <thread> #include <mutex>std::mutex a, b;void function_a() {std::lock_guard<std::mutex> _x(a);std:…

ctfshow

1&#xff0c;web517 通过输入两个单引号让查询语句正常&#xff0c;判断是什么注入&#xff0c;使用的是什么字符 然后我们通过order by 判断回显位&#xff0c;进行一个联合查询注入 获取数据库名 ctfshow的sqli-labs和本地搭建最大的不同&#xff0c;就是show的flag不在当前…

【AI论文】什么、如何、何处以及效果如何?大语言模型测试时缩放技术调研

摘要&#xff1a;随着预训练时代对计算&#xff08;数据和参数&#xff09;缩放的热情逐渐减退&#xff0c;测试时缩放&#xff08;Test-Time Scaling, TTS&#xff09;&#xff0c;也被称作“测试时计算”&#xff0c;已成为一个备受瞩目的研究焦点。近期研究表明&#xff0c;…