进程间通信分类
前提:
进程具有独立性,要通信就是要让它们:看到同一份资源(某种形式的内存空间,操作系统提供)
本地通信:同一台主机,OS,用系统调用通信。标准:systemV。
System V IPC(进程通信)
首创三种经典IPC机制:
System V 消息队列
System V 共享内存
System V 信号量
最常用的通信方式:管道
分为:
匿名管道pipe
命名管道
二。管道
将两个进程的数据流连起来。
命令行种创建的管道,几个进程是兄弟关系
命令后加&是进入后端执行。图中两个进程同一父进程,pid不同,ppid相同
1.匿名管道
子进程创建时
files_struct也会拷贝-》是进程文件关系的结构,偏进程。
1.struct file也是拷贝的,独立-->进程对文件修改的位置指针(位置)是存在struct file里的,不同进程可以访问同一文件的不同位置,所以要独立。
2.同一文件的inode和文件内核缓冲区不拷贝-->属于文件,无需独立修改。
3.IPC本质是让不同进程看到同一份资源(文件内核级缓冲区是操作系统创建的,不是进程new出来的)
什么时候释放内核缓冲区?
文件内核缓冲区也存在引用计数。
进程间通信的文件不需要将文件刷新到磁盘(多个进程同时对内核缓冲区写也会乱)-->创建一个只会存在内存的文件,其他一样--->管道
1.基于内存级文件的通信方式:只能单向通信,一个读一个写
需要先创建管道,后创建进程,父子进程各关闭一个通道(不关闭操作上没问题,但是fd泄露资源浪费,容易误操作),因为创建管道的时候没有指定文件,需要继承看到同一文件。
需要同时创建读写的文件描述符,管道struct_file内flag读/写子进程继承资源也只能读/写。
//实现
#include <stdio.h>
#include <iostream>
#include <string>
#include <sys/types.h>
#include <unistd.h>
#include <wait.h>
#include <cstdlib>
int main()
{int fds[2] = {0};//一般fd[0]读,fd[1]写int n = pipe(fds);if (n){std::cerr << "pipe" << std::endl;return 1;}pid_t pid = fork();if (pid < 0){std::cerr << "fork erro" << std::endl;}else if (pid == 0){// 子//关闭读管道::close(fds[0]);//系统调用,非库函数,加个标明好看int cot=0;std::string message="hello ";message+=std::to_string(getpid());//整数转字符while(true){::write(fds[1],message.c_str(),message.size());sleep(1);}exit(0);}else{// 关闭写管道::close(fds[1]);char buf[1024]={0};while(true){size_t n=::read(fds[0],buf,1024);std::cout<<buf<<std::endl;sleep(1);}pid_t rid = waitpid(pid, nullptr, 0);std::cout<<"child return"<<std::endl;}return 0;
}
问:普通文件的struct_file内也有flag吗?
在 Linux 内核中,普通文件(regular file)的 struct file
结构体确实包含 f_flags
字段,但它与文件的打开方式(如 O_RDONLY
、O_NONBLOCK
等)相关,而不是文件本身的属性。以下是关键细节分析:struct file
中的 f_flags
- 定义位置:
include/linux/fs.h
(内核源码)struct file {// ...unsigned int f_flags; // 文件打开时的标志(如 O_RDWR、O_NONBLOCK)fmode_t f_mode; // 文件模式(FMODE_READ、FMODE_WRITE)// ... };
- 作用:
- 记录进程打开该文件时指定的标志(通过
open()
系统调用传递的flags
参数)。 - 例如:
O_RDONLY
(只读)、O_NONBLOCK
(非阻塞)、O_SYNC
(同步写入)等。
- 记录进程打开该文件时指定的标志(通过
- 与文件本身无关:
- 这些标志是进程级别的,同一个文件被不同进程打开时,各自的
struct file
可能有不同的f_flags
。
- 这些标志是进程级别的,同一个文件被不同进程打开时,各自的
1.2验证接口。
问1:为什么不能错误cerr打印的程序输出>重定向到文件里
在 Linux/C++ 中,cerr
(标准错误流,对应文件描述符 stderr
,fd=2)和 cout
(标准输出流,对应 stdout
,fd=1)默认都会输出到终端,但它们是独立的流。如果你直接用 >
重定向,它默认只会重定向 stdout
(fd=1),而 cerr
的内容仍然会打印到终端。
将标准错误重定向的方法:
这里重定向的>一定要紧挨着两边文字
错误和输出一起重定向的方法:
原理是将1重定向到errlog,再把2重定向到1里,就是2->1->errlog
底层是打开errlog,将errlog(3)写到1里,将1写到2里。
作用:以后可以将错误写到日志里。
前置知识:
管道的:
- 读操作的行为:
- 成功读取:数据从缓冲区移除,释放空间供后续写入(管道有上限)。
- 读完清空:如果所有数据被读取,缓冲区变为空,后续读操作会阻塞(默认)或返回
EOF
(写端已关闭)。
问题:两个进程对同一文件改,一个改了一半一个直接读,看到的资源和已经有的资源就不一致。
怎么保护资源:
读完进程阻塞可以让保护资源,让读取的不为空,让写的不覆盖。
验证4:
管道特性:
1.操作: 1.单向通信
2.自带同步互斥等资源保护机制(读完写,写完再读)
2.生命周期:随进程
3.范围:不仅父子,只要能看到同一份资源,爷孙,兄弟也行。有血缘关系的IPC通信
6.原子性,将少于一定大小的写入管道必须是原子的,不用担心写一半被读走
管道的使用场景
1.进程池:父进程写,子进程读。只有父进程写数据(命令),子进程才不会read阻塞。
(类似条件变量)
(理解ps ajx|grep h; |就是匿名管道,依次创建兄弟进程,左边的输出重定向到匿名管道的输出,右边读取)
进程池(Process Pool) 就像是一个 “工人团队”,它的作用是:
- 提前创建好多个进程(工人),放在池子里待命。
- 有任务来了,直接派给空闲的进程处理,不用临时创建。
- 任务完成后,进程回到池子里,等待下一个任务。
为什么用进程池?
- ✅ 省时间:不用反复创建/销毁进程(创建进程很耗资源)。
- ✅ 控数量:避免同时运行太多进程把电脑卡死(比如只允许5个进程同时干活)。
- ✅ 易管理:任务排队,谁空闲谁干活,高效利用资源。
实践:
linux: 关于课程的代码实践
命名管道
一.为什么要有命名管道?
匿名管道标识同一块区域的方法是父子进程的继承,要想让非父子进程通信可以用文件名标识同一块区域。
二.命名管道比普通文件好在哪
普通文件是在磁盘上的,对它进行读写,其需要刷新到磁盘上,IO消耗大量资源,命名管道只需要在磁盘上存储个空文件,能通过路径找到它,真正区域在内存中。
相关文章:
进程间通信分类
前提: 进程具有独立性,要通信就是要让它们:看到同一份资源(某种形式的内存空间,操作系统提供) 本地通信:同一台主机,OS,用系统调用通信。标准:systemV。 S…...
uniapp-商城-56-后台 新增商品(弹窗属性继续分析)
1、概述 前面我们讲了布局和相应商品属性的页面布局。属性是一个弹窗,它是一个cell的组件的实现属性。点击该cell就会调用uni-popup 进行弹窗。基本的页面布局如下: 属性显示其实是个一嵌套的数据显示。 2 页面显示商品属性 点击添加属性 2.1 代码如…...
奇怪的公式
奇怪的公式 背景导入 在剑桥大学,瞥了一眼下面这个公式,我眩晕了,庆幸自己没学数学专业。 1 2 3 4 ⋯ − 1 12 1234\dots -\frac{1}{12} 1234⋯−121 一天,剑桥大学教授哥德弗雷哈代收到一封来自印度的信。写信人叫拉马…...
web 自动化之 PO 设计模式详解
文章目录 一、什么是 POM二、如何基于 POM 进行自动化框架架构?1、base 层封装2、pageobjects 层封装3、TestCases 层封装 三、元素和方法分离&数据分离1、哪些部分可以进行分离2、示例代码 四、总结 一、什么是 POM POM page object model 页面对象模型 WEB 自…...
golang 定时器
写法一: package mainimport ("fmt""sync""time" )type DemoTicker struct {ch <-chan time.Timestop chan struct{}sg *sync.WaitGroup }func main() {count, stopCount : 0, 5demo : DemoTicker{ch: time.Tick(time.Seco…...
ETL 数据集成平台与数据仓库的关系及 ETL 工具推荐
数字化时代企业每天都会产生海量的数据,这些数据分散在不同的系统、数据库和应用中。为了能够有效地利用这些数据,进行数据分析、商业智能决策等,ETL数据集成平台和数据仓库成为了企业数据管理架构中的关键组成部分。本文将深入探讨ETL数据集…...
java架构设计
1.可维护性 封装性,例如将缓存redis封装到一个service,别的地方用到,只需要传参调用就行。如果有一天换国产缓存,只需要修改service,而不需要修改多出引用地方 * 可维护性:后期功能迭代,不可避…...
UDP--DDR--SFP,FPGA实现之指令监测模块实现
指令监测模块实现介绍 如下图所示,为指令监测模块的运行框图 将指令设置为8bytes数据,故需要一个64位寄存器进行缓存,在进行数据缓存时,数据不可以输出至下一级模块,故对数据和有效指示信号也应该进行相应延迟&#…...
Houdini安装SideFX Labs工具架
开源免费的 https://github.com/sideeffects/SideFXLabs/releases 下载后解压 放到文档里 新建一个packages文件夹 把SideFXLabs.json 复制到packages文件夹 删除一些没用的平台 修改相关路径即可 然后就能在houdini里搜到 autouv 节点 不然没装是没有这个节点的 参考教程 …...
uniapp+vue3+uview来开发我们的项目
前言: 就像我们vue的web的框架element、iview等一样,我们的uni-app开发也有适合的他的框架,除了他本身的扩展组件以外,第三方好用的就是就是uview了。 实现效果: 官网信息: vue2版本:uview-ui …...
MySQL 5.7在CentOS 7.9系统下的安装(上)——以rpm包的形式下载mysql
这里我们主要以CentOS 7.9为例进行介绍,会顺带讲讲Ubuntu的操作方式。 目录 一、检查自己的机器上是否安装有MySQL: (1)第一步:检查系统中是否有正在运行的MySQL服务: (2) 检查当…...
【图像处理基石】什么是油画感?
在图像处理中,“油画感”通常指图像呈现出类似油画的块状纹理、笔触痕迹或色彩过渡不自然的现象,表现为细节模糊、边缘不锐利、颜色断层或人工纹理明显。这种问题常见于照片处理、视频帧截图或压缩后的图像,本质是画质受损的一种表现。以下是…...
深度学习之优化器【从梯度下降到自适应学习率算法】(pytorch版)
文章目录 优化器(Optimizer)二 基础优化器1. 梯度下降(Gradient Descent, GD)2. 随机梯度下降(Stochastic Gradient Descent, SGD) 三 动量优化算法标准动量优化(Momentum)自适应学习…...
React+Webpack 脚手架、前端组件库搭建
链接: 自己写的开发文档,希望大家多多批评...
基于 Python 和 OpenAI 接口规范的本地多轮对话
在自然语言处理的应用中,多轮对话系统是一种极具实用性的功能,无论是聊天机器人、客服系统还是智能助手,都离不开对上下文的持续理解和响应。随着 Ollama 等轻量级模型服务的流行,我们也可以在本地轻松部署语言模型,并…...
binlog日志以及MySQL的数据同步
binlog binlog是什么 记录所有数据库表结构,表数据的修改,但是不会记录Select和Show这类操作 binlog有几种记录模式 三种记录模式 statement: 基于SQL语句的复制 row: 基于行的复制,记录每行数据的变更(保证了数据的一致性&a…...
串口模块详细讲解
目录 1.串口介绍 2。STC-ISP串口功能介绍 3.接口及引脚定义 4.串口知识点 4.1 硬件电路 4.2 电平标准 4.3 相关术语 4.4 常见通信接口比较 4.5 51单片机的UART 4.6 串口参数及时序图 4.7 串口模式图 4.8 串口和中断系统 4.9 串口相关寄存器 5.串口向电脑发送信息…...
Flannel UDP 模式的优缺点
UDP 模式的特点、优缺点 优点 高兼容性:通过用户态 UDP 封装,无需内核支持 VXLAN 或其他高级网络功能,适用于旧版 Linux 内核或非标准环境。部署灵活:无需特殊内核模块或硬件支持,易于在异构环境中部署。简单实现&am…...
前端——布局方式
普通流(标准流) 所谓的标准流: 就是标签按照规定好默认方式排列. 1. 块级元素会独占一行,从上向下顺序排列。 常用元素:div、hr、p、h1~h6、ul、ol、dl、form、table 2. 行内元素会按照顺序,从左到右顺序排列&am…...
山东大学软件学院计算机图形学2025期末考题回忆版
任课教师:周元峰老师 考试时间:2025年5月13日 这次考试比之前的往年题多了写和读OpenGL代码的题目,其它和能找到的往年题(19、21、24)的差别不大。写完回忆题又发现自已错了好几个原题。。。。。。。。。。。。。。。…...
数控滑台:革新传统加工方式的利器
数控技术作为当今制造业中的重要发展方向,已深入到了各个领域,其中数控滑台作为数控加工领域的一个重要组成部分,对于提高加工效率、精度和质量具有重要意义。本文将重点探讨数控滑台的原理、优势以及在工业制造领域的应用。 一、数控滑台的…...
【WIN】笔记本电脑忘记密码解决办法/笔记本电脑重装系统笔记/bitlocker忘记密码的解决办法
通过安全模式下的CMD命令找回 具体的步骤就是: 首先通过笔记本的对应的一个进入安全模式的一个方式 进入安全模式之后,一直点着这个诊断,然后高级选项进去就可以看到了。 但是这种方法应该是属于安全漏洞,所以只适合老版本。如果是…...
手机相册的 “智能分类” 功能
我们以手机相册的 “智能分类” 功能(识别图片中的物体类型)为例,演示如何使用 TensorFlow Lite 框架将端侧模型部署到 Android 设备上。该场景通用且覆盖端侧部署的核心步骤:模型准备→环境配置→代码集成→硬件加速→业务调用。…...
配置Hadoop集群-上传文件
(一)上传小文件 上传文件的时候,我们传一个大一点的(>128M),再传一个小一点的。对于大一点的文件,我们要去看看它是否会按128M为单位去拆分这个大文件,而拆分成大文件之后&#x…...
SpringBoot整合MQTT实战:基于EMQX实现双向设备通信(附源码)
简言: 在万物互联的时代,MQTT协议凭借其轻量级、高效率的特性,已成为物联网通信的事实标准。本教程将带领您在Ubuntu系统上搭建EMQX 5.9.0消息服务器,并使用Spring Boot快速实现两个客户端的高效通信。通过本指南,您将…...
windows c++ (9) 程序内注册服务并修改登录账户
实现方式全以批处理文件实现,直接在进程内调用即可 1、注册服务 注册服务manage.bat内容如下 echo off setlocalset ServiceExeYouProcess.exe set ServiceNameYouProcess set BASE%~dp0:: 检查命令行参数 if "%~1""" (echo Usage: manage_p…...
按键精灵ios脚本新增元素功能助力辅助工具开发(三)
元素节点功能(iOSElement) 在按键精灵 iOS 新版 APP v2.2.0 中,新增了元素节点功能 iOSElement,该功能包含共 15 个函数。这一功能的出现,为开发者在处理 iOS 应用界面元素时提供了更为精准和高效的方式。通过这些函…...
OpenHarmony平台驱动开发(十五),SDIO
OpenHarmony平台驱动开发(十五) SDIO 概述 功能简介 SDIO(Secure Digital Input and Output)由SD卡发展而来,与SD卡统称为MMC(MultiMediaCard),二者使用相同的通信协议。SDIO接口…...
ICMP协议详解及不同VLAN/VXLAN主机通信中的ICMP示例
一、ICMP协议概述 ICMP(Internet Control Message Protocol,互联网控制消息协议)是TCP/IP协议栈中的一项核心协议,用于在IP网络中传输控制消息和错误报告。ICMP定义在RFC 792中,主要用于诊断网络问题和传递控制信息。…...
SQL server数据库实现远程跨服务器定时同步传输数据
项目背景 数据需要定期迁移,数据存在于客户政务外网下,从旧数据库迁移到新数据库中,且要求能够定时增量同步。 注意: 源数据库所在服务器为windows服务器,目标数据库所在服务器为linux服务器。 源数据库所在windows服…...
贝叶斯优化Transformer融合支持向量机多变量时间序列预测,Matlab实现
贝叶斯优化Transformer融合支持向量机多变量时间序列预测,Matlab实现 目录 贝叶斯优化Transformer融合支持向量机多变量时间序列预测,Matlab实现效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.BO-TransformerSVM多变量时间序列预测,…...
服务器租用与托管注意事项有哪些
在当今数字化的时代,服务器对于企业和个人的重要性不言而喻。无论是搭建网站、运行应用程序,还是存储数据,服务器都是关键的基础设施。而服务器租用与托管作为常见的选择方式,其中的注意事项你可不能马虎。 企业在进行租用或者是…...
【PostgreSQL数据分析实战:从数据清洗到可视化全流程】金融风控分析案例-10.3 风险指标可视化监控
👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路 文章大纲 PostgreSQL金融风控分析之风险指标可视化监控实战一、引言二、案例背景三、数据准备(一)数据来源与字段说明(二)数据清洗 四、…...
【AI提示词】贝叶斯分析专家
提示说明 一名专业的贝叶斯推断专家,具备统计建模、数据分析和不确定性决策方面的专长。 提示词 # Role: 贝叶斯分析专家## Profile - language: 中文 - description: 一名专业的贝叶斯推断专家,具备统计建模、数据分析和不确定性决策方面的专长 - ba…...
星云智控自定义物联网实时监控模板-为何成为痛点?物联网设备的多样化-优雅草卓伊凡
星云智控自定义物联网实时监控模板-为何成为痛点?物联网设备的多样化-优雅草卓伊凡 引言:物联网监控的模板革命 在万物互联的时代,设备监控已成为保障物联网系统稳定运行的核心环节。传统的标准化监控方案正面临着设备类型爆炸式增长带来的…...
#跟着若城学鸿蒙#HarmonyOS NEXT学习之Blank组件详解
一、组件介绍 Blank(空白)组件是HarmonyOS NEXT中一个简单但非常实用的UI组件,它主要用于在布局中创建空白区域,帮助开发者更灵活地控制界面元素之间的间距和布局结构。虽然Blank组件本身不显示任何内容,但它在界面设…...
《Docker 入门与进阶:架构剖析、隔离原理及安装实操》
1 docker 简介 1.1 Docker 的优点 Docker 是一款开放平台,用于应用程序的开发、交付与运行,能将应用和基础架构分离,实现软件快速交付 ,还能以统一方式管理应用和基础架构,缩短代码从编写到上线的时间。其核心优势如…...
OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——mqtt库
准备工作 请依照这篇文章搭建环境 OpenHarmony 开源鸿蒙南向开发——linux下使用make交叉编译第三方库——环境配置_openharmony交叉编译-CSDN博客 下载 wget ftp://ftp.gnutls.org/gcrypt/gnutls/v3.5/gnutls-3.5.9.tar.xz 解压 tar -xf mkdir ./out cd ./out Cmake命…...
【LeetCode 热题 100】二叉树的最大深度 / 翻转二叉树 / 二叉树的直径 / 验证二叉搜索树
⭐️个人主页:小羊 ⭐️所属专栏:LeetCode 热题 100 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 二叉树的中序遍历二叉树的最大深度翻转二叉树对称二叉树二叉树的直径二叉树的层序遍历将有序数组转换为二叉搜索树验…...
中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世
中国版 Cursor---腾讯云 CodeBuddy | 从安装VSCode到数独小游戏问世 引言CodeBuddy环境准备VSCodeCodeBuddyNode.js下载安装 游戏开发Craft模型一句话生成数独游戏游戏体验 EdgeOne PagesMCPPages MCP Server配置 MCP Server 游戏源码总结 引言 在正文开始之前,先引…...
【蓝桥杯嵌入式】【复盘】第13届国赛真题
1. 前言 最近在准备16届的蓝桥杯嵌入式赛道的国赛,打算出一个系列的博客,记录STM32G431RBT6这块比赛用板上所有模块可能涉及到的所有考点,如果有错误或者遗漏欢迎各位大佬斧正。 本系列博客会分为以下两大类: 1.1. 单独模块的讲…...
Docker疑难杂症解决指南
Docker疑难杂症解决指南 Docker作为容器化技术的代表,广泛应用于开发、测试和部署环境中。然而,在使用过程中,用户可能会遇到各种问题。以下是一些常见的Docker疑难杂症及其解决方法。 容器无法启动 容器无法启动是常见问题之一࿰…...
嵌入式开发学习日志(数据结构--顺序结构单链表)Day19
一、顺序结构 安装软件命令: sudo apt-get install (软件名) 安装格式化对齐:sudo apt-get install clang-format 内存泄漏检测工具: sudo apt-get install valgrind 编译后,使用命令 valgrind ./a.out 即可看内…...
MySQL 8.0 OCP 1Z0-908 题目解析(2)
题目005 Choose two. Which two actions can obtain information about deadlocks? □ A) Run the SHOW ENGINE INNODB MUTEX command from the mysql client. □ B) Enable the innodb_status_output_locks global parameter. □ C) Enable the innodb_print_all_deadlock…...
短板效应--双指针
1.根据题意取决于最小的高,那么 若当移动最小高的一端,mv可能会变 但若移动较大的一端,v一定会变小就没有意义了,所以我们只需要每次移动一端,直到lr就行 2.原理就是与左右端点有关且每次只要移动一端就行 #include…...
CodeBuddy终极测评:中国版Cursor的开发革命(含安装指南+HTML游戏实战)
一、腾讯云CodeBuddy产品全景解读 1. 什么是腾讯云代码助手? 官方定义: Tencent Cloud CodeBuddy是由腾讯自研的AI编程辅助工具,基于混元大模型DeepSeek双引擎,提供: ✅ 智能代码补全(支持200语言&#x…...
【Linux】简单设计libc库
📝前言: 经过之间两篇文章,【Linux】基础IO(一)和【Linux】基础IO(二)的学些,我们对文件的基础IO已经有了一定的理解。 这篇文章我们来简单设计一下libc库,来复习一下文…...
3335. 字符串转换后的长度 I
3335. 字符串转换后的长度 I class Solution:def lengthAfterTransformations(self, s: str, t: int) -> int:# 大质数mod 10**97# 创建一个长度为26的数组cnt,对应26个小写字母cnt [0]*26# 计算出s中26个字符分别有多少个for ch in s:cnt[ord(ch)-ord(a)] 1f…...
《医院网络安全运营能力成熟度评估指南》(试行版)研究解读
引言 随着数字化转型的不断深入,医院信息化建设已从单点应用走向全面系统集成,信息系统已成为支撑医院业务运行和管理决策的基础设施。然而,信息化发展也带来了日益复杂的网络安全挑战,从传统的边界防护到如今的全方位安全威胁,医院网络安全建设面临着前所未有的压力。20…...
鸿蒙5.0项目开发——鸿蒙天气项目的实现(介绍)
【高心星出品】 文章目录 项目简介:项目运行效果图:主要功能:使用的技能点:开发环境: 项目简介: 这是一个基于鸿蒙系统(HarmonyOS)开发的天气应用,采用 ArkTS 语言开发&…...