【Linux】进程间通信 续
目录
管道的原理(匿名管道)
核心原理
站在内核的角度看管道的本质
接口
创建管道文件
代码示例
管道的特征
管道读写端的四种情况
管道的应用场景
命令行的管道。
使用管道实现进程池
初始化
控制子进程
退出
命名管道
命名管道的理解
代码示例
服务端
客户端
日志
共享内存(system v)
原理解析
代码案例
让两个进程看到同一份资源
开始通信
共享内存的特性
共享内存的属性
利用管道实现同步机制
消息队列(system v)
原理
接口
信号量(system v)
理解信号量
接口
IPC在内核中的数据结构设计
管道的原理(匿名管道)
文件描述符表,文件的加载,内存中生成一个文件对象,每个文件对象有inode,方法集,文件缓冲区,磁盘中的文件属性加载到inode,文件内容加载到文件缓冲区。
内存级文件,不在磁盘中,只在内存中运转,类似于临时文件。
子进程会拷贝父进程PCB,文件描述符表,但不会拷贝文件对象。所以它们指向同一个文件对象。
父子进程可以同时看到这个文件,意味着可以在这个内存级文件的缓冲区进行通信了。
管道就是文件,只不过是内存级文件。
核心原理
父进程以读和写打开管道文件。
父子进程都指向管道文件。
各自关闭一端读或写,可实现单向通信。
站在内核的角度看管道的本质
父进程同时用读方式和写方式打开管道文件,会创建读文件对象和写文件对象,但它们是同一个文件,都是同一个inode,同一个方法集,同一个缓冲区。
把父进程写关闭,子进程读关闭。
上述讲的是匿名管道。
接口
创建管道文件
成功返回0,失败返回-1并设置错误码。
参数是输出型参数。
代码示例
创建子进程各自关闭一端。子进程写父进程读。
子进程构建内容,写给管道文件。
父进程从管道文件接收信息。
管道的特征
管道读写端的四种情况
读端如果关闭,写端就会被13信号杀死。
管道的应用场景
命令行的管道。
使用管道实现进程池
模型思路:父进程写子进程读。
Makefile
描述需要管理的信息
组织信息并初始化
控制子进程
控制退出
初始化
创建多个管道和多个子进程,并记录想要的信息。
子进程的任务
接收父进程给的任务码,执行对应任务
控制子进程
给子进程发送任务码
退出
关闭写端
等待子进程退出
命名管道
指令
创建命名管道
命名管道的理解
不同的进程会以读写方式打开不同的文件对象,但都指向同一个文件的inode,方法集,缓冲区。
这样可以让不同的进程看到同一份资源
不同进程通信时不想要刷盘就诞生了管道文件,也就是内存级文件,管道文件不需要刷盘。
不同进程通信的前提是看到同一份资源,为了保证同一份资源我们就用了路径+文件名确定,因为具有唯一性,所以叫命名管道。
代码示例
makefile
生成两个可执行程序,一个服务端,一个客户端。
服务端
创建管道文件
第一个参数是路径文件名,第二个参数是文件权限
删除管道文件
参数是路径文件名
把创建和删除放到类的构造和析构中,用类的生命周期来管理。
打开管道文件
开始通信
客户端
打开文件
开始通信,用户输入
cin 是空格和回车分割,getline是回车分割。
关闭
日志
形参实例化从右向左
va_list 是一个char*
va_start让这个指针指向第一个参数的下一位
va_arg 根据类型提参数
va_end 指针置空
时间
输入时间戳可以转化为一个时间结构体
日志格式分为两部分
左部分是日志等级和时间
右部分是用户自定义部分
打印日志有三种,往屏幕打印,往文件打印,往不同文件打印
共享内存(system v)
原理解析
在物理内存创建一块区域,这块区域都映射在不同进程的共享区,进程对共享区的操作实现对同一块区域的交流。
释放共享内存
代码案例
让两个进程看到同一份资源
在系统里创建一个共享内存
唯一标识符key
获取共享内存
1. 获取key
2. 创建共享内存
key与shmid
查看共享内存 ipcs -m
手动关闭是 ipcrm -m shmid
共享内存的权限设置
创建共享内存与获取共享内存
共享内存的大小
挂接
去关联
传入挂接得到的地址
释放共享内存
a进程负责创建和删除共享内存,b进程负责获取共享内存。
开始通信
a进程读,b进程写
a进程直接从共享内存获取信息
b进程直接写到共享内存
共享内存的特性
共享内存的属性
获取共享内存属性
利用管道实现同步机制
获取key
获取共享内存分为创建和单纯获取
进程a,收到提醒后才去访问共享内存。
进程b,写完信息后通知对方访问。
消息队列(system v)
原理
不同的进程看到同一个队列,将带类型的数据块发送给队列,从队列上获取自己想要的数据。
接口
指令查看和删除消息队列
信号量(system v)
共享内存没有保护机制
临界资源,临界区
理解信号量
信号量的本质是计数器。
临界资源被分成很多块资源,信号量记录着还剩多少块资源。
每当执行流申请资源,信号量就记录资源被使用一份,资源使用完了就不给申请了,除非执行流还回来。
使用资源之前得先申请
原子的PV操作
概念总结
接口
申请信号量
第二个参数是申请信号量的个数,一般为1。
操作信号量
设置信号量
sembuf结构体需要自己定义
sem_op控制PV操作
IPC在内核中的数据结构设计
系统用数组管理IPC资源,数组存放的是第一个字段,可以直接访问ipc_perm结构体,如果想访问整个ipc的结构体只需要强转类型即可,这是多态最早的样子。
相关文章:
【Linux】进程间通信 续
目录 管道的原理(匿名管道) 核心原理 站在内核的角度看管道的本质 接口 创建管道文件 代码示例 管道的特征 管道读写端的四种情况 管道的应用场景 命令行的管道。 使用管道实现进程池 初始化 控制子进程 退出 命名管道 命名管道的理解 …...
心率提取,FFT
rPPG 信号提取: 从面部视频中提取 rPPG 信号,通常是通过对视频帧中的面部区域进行颜色通道分析,提取出反映血液容积变化的信号。 信号预处理: 对提取的 rPPG 信号进行滤波、归一化等预处理操作,以去除噪声和干扰。 心率…...
Data truncation: Out of range value for column ‘allow_invite‘ at row 1
由于前端传递的数值超过了mysql数据库中tinyint类型的取值范围,所以就会报错。 Caused by: com.mysql.cj.jdbc.exceptions.MysqlDataTruncation: Data truncation: Out of range value for column allow_invite at row 1at com.mysql.cj.jdbc.exceptions.SQLExcept…...
ZYNQ-PL学习实践(二)按键和定时器控制LED闪烁灯
ZYNQ-PL学习实践(二)按键和定时器控制LED闪烁灯) 1 创建工程2 verilog 代码3 约束4 综合5 生成bit总结 1 创建工程 2 verilog 代码 添加key_led.v 文件, module key_led(input sys_clk , //系统时钟50MHzinput …...
【CXX】4.4 其他构建系统
你需要至少完成以下三件事: 生成CXX生成的C绑定代码。 编译生成的C代码。 将生成的目标文件与你的其他C和Rust目标文件链接在一起。 并非所有构建系统都是平等的。如果你希望使用90年代的构建系统,尤其是如果你希望覆盖2个或更多构建系统(…...
windows 上删除 node_modules
在 Windows 11 上,你可以通过命令行来删除 node_modules 文件夹并清除 npm 缓存。以下是具体步骤: 删除 node_modules 打开命令提示符(Command Prompt)或终端(PowerShell)。 导航到项目目录。你可以使用 …...
mysql之如何获知版本
你可以通过在 MySQL 命令行客户端执行简单的 SQL 查询来获取 MySQL 的版本信息。以下是获取 MySQL 版本的常见方法: 使用 SELECT VERSION(); 查询: SELECT VERSION();执行这个查询后,MySQL 会返回一个字符串,其中包含了 MySQL 服…...
PHP 将图片url,写入到文件夹中,导出到zip下载到桌面
一:将图片写入到文件内 文件url:比如 【https://image.baidu.com/search/detail?ct503316480&z0&ipnfalse&word%E5%9B%BE%E7%89%87%E5%A4%B4%E5%83%8F&hs0&pn1&spn0&di7466852183703552001&pi0&rn1&tnbaiduima…...
系统架构设计师—计算机基础篇—文件管理
文章目录 文件结构逻辑结构物理结构文件的索引直接索引间接索引做题的方法 文件存储空间管理位示图 文件结构 文件的结构是指文件的组织形式。 逻辑结构 从用户角度看到的文件的组织形式。 用户知道文件名就可以存取文件中的信息。 物理结构 文件在文件存储器上的存放方式…...
【MySQL】用MySQL二进制包构建docker镜像
一、实验背景 【MySQL&docker】基于CentOS7.5 编译制作MySQL5.7.28镜像 https://www.jianshu.com/p/71fd79b69a6b 用MySQL源码编译的docker镜像,体积过大,直奔3G了,你也不清楚,这点编译参数打出的体积怎么就这么大!…...
C++ std::vector 超详细指南:基础实践(手搓vector)
目录 一.基本概念 二.类的常用接口说明 1.类对象的常见构造 2. vector类空间变化 1).size()(获取数据个数) 2).capacity()(获取容量大小) 3).empty()(判断是否为空࿰…...
java面试复习巩固
韩顺平Java__哔哩哔哩_bilibili 1、Java中源文件中可以有多个类,最多只能有一个public类? 程序分为编译和执行两个阶段。 编译阶段 如果存在public类,那么一个源文件中只能够存在一个而且要与源文件的名字相同。----------否则编译会报错…...
《STL源码剖析》笔记记录
《STL源码剖析》笔记记录 2.空间适配器(allocator) 分配的是空间,而不一定是内存 为了精密分⼯,STL allocator 决定将这两个阶段操作区分开来。 1、对象构造由 ::construct() 负责;对象释放由 ::destroy() 负责。 2、内存配置由 alloc::al…...
《Linux C 智能 IO 矩阵:输入输出的自适应数据流转》
1. 标准库IO简介 标准库IO特点:通过操作系统提供的接口(API)和操作系统进行交互。(接近100个函数) 1.1. IO的过程 操作系统:向上为用户提供操作接口,向下为统筹控制硬件。 操作系统的组成&#…...
idea生成自定义Maven原型(archetype)项目工程模板
一、什么是Maven原型(Maven archetype) 引自官网的介绍如下: Maven原型插件官网地址 这里采用DeepSeek助手翻译如下: Maven 原型 什么是原型? 简而言之,原型是一个 Maven 项目模板工具包。原型被定义为一…...
CES Asia 2025增设未来办公教育板块,科技变革再掀高潮
作为亚洲消费电子领域一年一度的行业盛会,CES Asia 2025(第七届亚洲消费电子技术贸易展)即将盛大启幕。今年展会规模再度升级,预计将吸引超过500家全球展商参展,专业观众人数有望突破10万。除了聚焦人工智能、物联网、…...
(二 十 二)趣学设计模式 之 备忘录模式!
目录 一、 啥是备忘录模式?二、 为什么要用备忘录模式?三、 备忘录模式的实现方式四、 备忘录模式的优缺点五、 备忘录模式的应用场景六、 总结 🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,…...
物联网同RFID功能形态 使用场景的替代品
在物联网(IoT)和自动识别技术领域,除了RFID标签外,还有一些其他技术产品可以在形态和大小上与RFID标签相似,同时提供类似或更强大的功能。以下是几种能够替代RFID标签的产品: 一、NFC标签 NFC(…...
蓝陵科技:以“数字底座”之力,全面布局影视行业工业化
“在数字技术与文化产业深度融合的今天,海南蓝陵数字科技有限公司(以下简称蓝陵科技)凭借其卓越的渲染实力和前瞻性的战略布局,正逐步成为推动中国影视行业工业化进程的重要力量。2025年2月,蓝陵科技不仅获得了陵水融媒…...
React + TypeScript 实战指南:用类型守护你的组件
TypeScript 为 React 开发带来了强大的类型安全保障,这里解析常见的一些TS写法: 一、组件基础类型 1. 函数组件定义 // 显式声明 Props 类型并标注返回值 interface WelcomeProps {name: string;age?: number; // 可选属性 }const Welcome: React.FC…...
本地部署大数据集群前置准备
1. 设置VMware网段 虚拟网络编辑器——更改设置——选择VMnet8——子网改成192.168.88.0——NAT设置——网关设置为192.168.88.2 2. 下载CentOS操作系统 下载CentOS 7.6(1810)版本 3. 在VMware中安装CentOS操作系统 创建新的虚拟机——典型——安装光盘映像文件——输入账…...
016.3月夏令营:数理类
016.3月夏令营:数理类: 中国人民大学统计学院: http://www.eeban.com/forum.php?modviewthread&tid386109 北京大学化学学院第一轮: http://www.eeban.com/forum.php?m ... 6026&extrapage%3D1 香港大学化学系夏令营&a…...
历年北京理工大学计算机复试上机真题
历年北京理工大学计算机复试上机真题 在线评测:https://app2098.acapp.acwing.com.cn/ 分段函数 题目描述 编写程序,计算下列分段函数 yf(x) 的值。 当 0< x <2,y -x2.5;当 2< x <4,y2-1.5(x-3)(x-3)…...
Linux的缓存I/O和无缓存IO
一、I/O缓存的背景 I/O缓存是指在内存里开辟一块区域,存放用来接收用户输入和用于计算机输出的数据,以减小系统开销和提高外设效率。linux对IO文件的操作分为不带缓存的IO操作和带缓存的IO操作(标准IO操作)。为什么存在C标准I/O库…...
题目 3216 ⭐团建⭐【DFS】蓝桥杯2024年第十五届省赛
小蓝正在和朋友们团建,有一个游戏项目需要两人合作,两个人分别拿到一棵大小为 n 和 m 的树,树上的每个结点上有一个正整数权值 c 1 , c 2 , ⋅ ⋅ ⋅ , c n c_1, c_2, , c_n c1,c2,⋅⋅⋅,cn, d 1 , d 2 , ⋅ ⋅ ⋅ , d m d_1, d_…...
从0到1入门Linux
一、常用命令 ls 列出目录内容 cd切换目录mkdir创建新目录rm删除文件或目录cp复制文件或目录mv移动或重命名文件和目录cat查看文件内容grep在文件中查找指定字符串ps查看当前进程状态top查看内存kill终止进程df -h查看磁盘空间存储情况iotop -o直接查看比较高的磁盘读写程序up…...
战略合作升级 | 大势智慧携手广西地测院,共绘智慧测绘新蓝图
2月26日,武汉大势智慧科技有限公司(以下简称“大势智慧”)与广西壮族自治区地理信息测绘院(以下简称“广西地测院”)在南宁举行战略合作升级签约仪式暨技术交流座谈会。 大势智慧董事长黄先锋与广西地测院党委书记、院…...
批量插入对比-mysql-oracle-sqlserver
单个插入mysql //单个 根据有值就插入,无值不改动 <insert id"insertOne" keyColumn"id" keyProperty"id"parameterType"com.test.log" useGeneratedKeys"true">insert into test_mysql_tab<trim p…...
jmeter阶梯式压测
1、安装plugins manager 链接 Install :: JMeter-Plugins.org 将下载下来的jar包放置在jemter文件的lib\ext下, 重启Jmeter 2、安装阶梯测试第三方插件 在Available Plugins中找到Custom Thread Groups,点击Apply Changes and Restart JMeter后等待插件…...
nginx.conf 完整配置总结概述
----------------------------------------------------------- /usr/local/nginx/sbin/nginx -s reload # 重新载入配置文件 /usr/local/nginx/sbin/nginx -s reopen # 重启 Nginx /usr/local/nginx/sbin/nginx -s stop # 停止 Nginx /usr/local/nginx/sbin/nginx …...
docker常规命令和高级用法
Docker 是一个强大的容器化平台,提供了丰富的命令和功能来管理容器、镜像、网络和存储等。以下是一些常用的 Docker 命令及其高级用法。 1. 容器管理 1.1 启动容器 基本用法: docker run <image_name>示例: docker run ubuntu高级用法…...
Spark核心之02:常用算子详解
1、RDD操作详解 # 启动spark-shell spark-shell --master local[2] 1.1 基本转换 1) map map是对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。 任何原RDD中的元素在新RDD中都有且只有一个元素与之对应。 举例: scala> val a sc.parallelize(1 …...
【CSS—前端快速入门】CSS 常用样式
CSS 常用 CSS 样式 1. 前端样式查询网站: MDN Web Docs (mozilla.org) w3school 2. border 2.1 借助 MDN 了解 border 我们借助 MDN 网站来学习 border 样式的使用: 2.2 border 常见属性 保存代码,打开页面: 对于标签不同样式的…...
探索DeepSeek-R1的核心秘诀:突破SFT技术的新篇章
摘要 近期,一种显著超越SFT(Sequence-to-Sequence with Teacher Forcing)的技术成为研究焦点。作为o1/DeepSeek-R1的核心秘诀,该技术不仅提升了模型性能,还成功应用于多模态大型模型中,实现了功能扩展。与传…...
DailyNotes 增加提醒功能
TODO:准备给 DailyNotes 增加一个提醒功能,准备接入 AI 来做一些事情。试了一下,非常靠谱。 具体 DailyNotes 和 Ollama 的交互方式,可以直接调用命令行,也可以走网络API。 rayuK2CD9WCYN4 ~ % ollama run deepseek-…...
[Computer Vision]实验六:视差估计
目录 一、实验内容 二、实验过程 2.1.1 test.py文件 2.1.2 test.py文件结果与分析 2.2.1 文件代码 2.2.2 结果与分析 一、实验内容 给定左右相机图片,估算图片的视差/深度;体现极线校正(例如打印前后极线对)、同名点匹配…...
软件测试基础:功能测试知识总结
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、测试项目启动与研读需求文档 (一) 组建测试团队 1、测试团队中的角色 2、测试团队的基本责任 尽早地发现软件程序、系统或产品中…...
171. Excel 表列序号
Excel 表列序号 题目描述尝试做法推荐做法 题目描述 给你一个字符串 columnTitle ,表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如: A -> 1 B -> 2 C -> 3 … Z -> 26 AA -> 27 AB -> 28 … 示例 1: 输入: colum…...
03.05 QT事件
实现一个绘图工具,具备以下功能: 鼠标绘制线条。 实时调整线条颜色和粗细。 橡皮擦功能,覆盖绘制内容。 撤销功能,ctrl z 快捷键撤销最后一笔 程序代码: <1> Widget.h: #ifndef WIDGET_H #define WIDGET…...
es如何进行refresh?
在 Elasticsearch 中,refresh 操作的作用是让最近写入的数据可以被搜索到。以下为你介绍几种常见的执行 refresh 操作的方式: 1. 使用 RESTful API 手动刷新 你可以通过向 Elasticsearch 发送 HTTP 请求来手动触发 refresh 操作。可以针对单个索引、多个索引或者所有索引进…...
unity6 打包webgl注意事项
webgl使用资源需要异步加载 使用localization插件时要注意,webgl不支持WaitForCompletion,LocalizationSettings.InitializationOperation和LocalizationSettings.StringDatabase.GetTable都不能用 web里想要看到具体的报错信息调试开启这两个…...
【前端基础】Day 9 PC端品优购项目
目录 1. 品优购项目规划 1.1 网站制作流程 1.2 品优购项目整体介绍 1.3 学习目的 1.4 开发工具以及技术栈 1.5 项目搭建工作 1.6 网站favicon图标 1.7 网站TDK三大标签SEO优化 2. 品优购首页制作 2.1 常见模块类命名 2.2 快捷导航shortcut制作 2.3 header制作 2.4…...
【django初学者项目】
下面为你详细介绍如何创建一个简单有趣的 Django 项目——博客系统。这个项目允许用户创建、查看、编辑和删除博客文章。 步骤 1:环境准备 首先,确保你已经安装了 Python 和 pip。然后,创建一个虚拟环境并激活它,接着安装 Django…...
自学微信小程序的第十三天
DAY13 1、使用map组件在页面中创建地图后,若想在JS文件中对地图进行控制,需要通过地图API来完成。先通过wx.createMapContext()方法创建MapContext(Map上下文)实例,然后通过该实例的相关方法来操作map组件。 const m…...
gitbash忽略未追踪文件的解决方式
文章目录 问题描述,如下图解决方式 问题描述,如下图 因为这些事项目本地运行或者IDE环境配置时产生的文件或目录,手动删除后还来出现,怎么实现忽略不显示呢? 解决方式 查看项目的根目录下是否存在.gitignore文件&…...
React生态、Vue生态与跨框架前端解决方案
React生态系统 1 基础框架 React.js 是一个用于构建UI的JavaScript库。 2 应用框架 Next.js 是基于React.js的完整应用框架。主要负责应用如何工作: 应用架构:路由系统、页面结构渲染策略:服务端渲染(SSR)、静态生成(SSG)、客户端渲染性…...
GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks
GPPT: Graph Pre-training and Prompt Tuning to Generalize Graph Neural Networks KDD22 推荐指数:#paper/⭐⭐# 动机 本文探讨了图神经网络(GNN)在迁移学习中“预训练-微调”框架的局限性及改进方向。现有方法通过预训练(…...
【Elasticsearch】Elasticsearch 的`path.settings`是用于配置 Elasticsearch 数据和日志存储路径的重要设置
Elasticsearch 的path.settings是用于配置 Elasticsearch 数据和日志存储路径的重要设置,这些路径在elasticsearch.yml配置文件中定义。以下是关于 Elasticsearch 的路径设置(path.data和path.logs)以及快照存储库配置的详细说明:…...
使用vue3+element plus 的table自制的穿梭框(支持多列数据)
目录 一、效果图 二、介绍 三、代码区 一、效果图 话不多说,先上图 二、介绍 项目需要:通过穿梭框选择人员信息,可以根据部门、岗位进行筛选,需要显示多列(不光显示姓名,还包括人员的一些基础信息&…...
学习笔记:IC存储总结(ROM,RAM, EEPROM, Flash, SRAM, DRAM, DDL)
一,概述 半导体存储器是一种可以存储大量二值信息的半导体器件。在电子计算机及一些其他的数字系统的工作过程中,需要对大量的数据进行储存。由于数据处理的数据量和运算速度的要求,因此把存储量和存取速度作为衡量存储器的重要指标。 在电子…...