当前位置: 首页 > news >正文

进程间通信方式

1>内核提供的原始通信方式有三种

1)无名管道

2)有名管道

3)信号

2>System V提供了三种通信方式

4)消息队列

5)共享内存

6)信号量(信号灯集)

3>套接字通信

7)socket

1)无名管道

1> 无名管道,就是没有名字的管道,是一个特殊的文件,并且存储在内存上,不在文件系统中展示

2> 无名管道打开后,会返回两个文件描述符,分别是读端和写端,当一个无名管道文件的两端全部被关闭后,管道文件在内存上消失

3> 由于无名管道在文件系统中没有真实的名字存在,所以不能使用open函数来打开,需要使用特殊的api进行打开

4> 无名管道只能适用于亲缘进程间的通信,需要在fork之前将管道文件打开,创建子进程后,子进程继承一份管道的文件描述符才能使用该管道

5> 无名管道的api

int pipe(int pipefd[2]);

2)有名管道

1> 有名管道,有名字的管道文件,会在文件系统创建一个管道文件,类型为 p

2> 该管道文件,仅仅只是用来进行进程间通信,不用于存储数据

3> 对管道文件的操作,可以使用open函数进行打开,所以,有名管道既可以用于亲缘进程间通信,也可以用于非亲缘进程间通信

4> 有名管道的api

int mkfifo(const char *pathname, mode_t mode);

3)信号

1> 信号是软件模拟底层硬件的中断操作,中断:打断当前正在进行的事情,去做另一件事

2> 信号是软件实现的,中断是硬件实现的

3> 信号是linux内核实现的,没有linux,就没有信号的概念

4> 用户可以给某个进程发送信号,一个进程也能给另一个进程发送信号,内核也可以给某个进程发送信号

5> 当一个进程收到信号后的操作有三种:默认(一般是杀死进程)、捕获、忽略

6>API

typedef void (*sighandler_t)(int);         //自定义函数类型sighandler_t signal(int signum, sighandler_t handler);

 4)消息队列

消息队列API(ftok、msgget、msgsnd、msgrcv、msgctl)

key_t ftok(const char *pathname, int proj_id);                //ftok("/", 'k');
功能:通过给定的数据,创建出一个用于IPC通信的key值int msgget(key_t key, int msgflg);
功能:通过给定的key值,以及消息队列的标识,创建一个消息队列int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
功能:向消息队列中存放数据ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp,
int msgflg);
功能:从消息队列中去一个消息int msgctl(int msqid, int cmd, struct msqid_ds *buf);
功能:控制消息队列相关属性

5)共享内存

共享内存的操作不是一次性的,当共享内存段中的数据被读取后,依然存在,共享内存是所有进程间通信方式中效率最高的,原因是,操作共享内存段时,无需进行用户空间和内核空间的切换

共享内存的API(shmget、shmat、shmdt、shmctl)

int shmget(key_t key, size_t size, int shmflg);
功能:获取共享内存段的ID void *shmat(int shmid, const void *shmaddr, int shmflg);
功能:映射共享内存到用户空间 int shmdt(const void *shmaddr);
功能:撤销映射int shmctl(int shmid, int cmd, struct shmid_ds *buf);
功能:操作共享内存

6)信号量(信号灯集)

信号量是完成多个进程之间同步问题的

信号灯集的API(semget、semctl、semop)

int semget(key_t key, int nsems, int semflg);
功能:创建信号灯集,并返回该信号灯集的idint semctl(int semid, int semnum, int cmd, ...);
功能:初始化信号灯集中信号灯的值或者删除信号灯集int semop(int semid, struct sembuf *sops, unsigned nsops);
功能:完成PV操作 

7)socket

socket(网络通信中信息的载体)

1> socket最原始时期也是用来完成同一主机之间的两个进程间的通信,随着TCP/IP协议族的引入,也能完成跨主机之间进程的通信

2> socket本质上是一个套接字文件,操作该文件时,使用的是文件io操作,实际操作的还是文件描述符

3> socket也是一个函数,用于创建一个套接字

既可以创建TCP通信的套接字,也适用于创建UDP通信的套接字

4> socket是系统给我们提供的函数,他会将复杂的网络通信过程转换成我们熟悉的IO操作,TCP/IP协议已经被集成到操作系统的内核中,

使用socket进行通信,相当于一种新型的IO操作

5> 通过传参的形式,来指定想要使用的协议

具体实现,会根据我们传入的参数的不同来完成

对于该文件操作方式:打开文件 --> 读写文件 --> 关闭文件

相关文章:

进程间通信方式

1>内核提供的原始通信方式有三种 1)无名管道 2)有名管道 3)信号 2>System V提供了三种通信方式 4)消息队列 5)共享内存 6)信号量(信号灯集) 3>套接字通信 7)socke…...

[linux]:匿名管道和命名管道(什么是管道,怎么创建管道(函数),匿名管道和命名管道的区别,代码例子)

目录 一、匿名管道 1.什么是管道?什么是匿名管道? 2.怎么创建匿名管道(函数) 3.匿名管道的4种情况 4.匿名管道有5种特性 5.怎么使用匿名管道?匿名管道有什么用?(例子) 二、命名…...

Python调用matlab程序

matlab官网:https://ww2.mathworks.cn/?s_tidgn_logo matlab外部语言和库接口,包括 Python、Java、C、C、.NET 和 Web 服务。 matlab和python的版本 安装依赖配置 安装matlab的engine 找到matlab的安装目录:“xxx\ extern\engines\python…...

FlinkSql 窗口函数

Windowing TVF 以前用的是Grouped Window Functions(分组窗口函数),但是分组窗口函数只支持窗口聚合 现在FlinkSql统一都是用的是Windowing TVFs(窗口表值函数),Windowing TVFs更符合 SQL 标准且更加强大…...

十分钟GIS——geoserver+postgis+udig从零开始发布地图服务

1数据库部署 1.1PostgreSql安装 下载到安装文件后(postgresql-9.2.19-1-windows-x64.exe),双击安装。 指定安装目录,如下图所示 指定数据库文件存放目录位置,如下图所示 指定数据库访问管理员密码,如下图所…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Span组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Span组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Span组件 鸿蒙(HarmonyOS)作为Text组件的子组件&#xff0…...

Leetcode—42. 接雨水【困难】

2024每日刷题&#xff08;112&#xff09; Leetcode—42. 接雨水 空间复杂度为O(n)的算法思想 实现代码 class Solution { public:int trap(vector<int>& height) {int ans 0;int n height.size();vector<int> l(n);vector<int> r(n);for(int i 0; …...

[Python] opencv - 什么是直方图?如何绘制图像的直方图?如何对直方图进行均匀化处理?

什么是直方图&#xff1f; 直方图是一种统计图&#xff0c;用于展示数据的分布情况。它将数据按照一定的区间或者组进行划分&#xff0c;然后计算在每个区间或组内的数据频数或频率&#xff08;即数据出现的次数或占比&#xff09;&#xff0c;然后用矩形或者柱形图的形式将这…...

ppi rust开发 python调用

创建python的一个测试工程 python -m venv venv .\venv\Scripts\activatepip install cffi创建一个rust的lib项目 cargo new --lib pyrustlib.rs #[no_mangle] pub extern "C" fn rust_add(x: i32, y: i32) -> i32 {x y }Cargo.toml [package] name "p…...

网站后端开发 thinkphp6 入门教程合集(更新中)

thinkphp6 入门&#xff08;1&#xff09;--安装、路由规则、多应用模式 thinkphp6 入门&#xff08;1&#xff09;--安装、路由规则、多应用模式_软件工程小施同学的博客-CSDN博客 thinkphp6 入门&#xff08;2&#xff09;--视图、渲染html页面、赋值 thinkphp6 入门&#x…...

Web前端框架-Vue(初识)

文章目录 web前端三大主流框架**1.Angular****2.React****3.Vue**什么是Vue.js 为什么要学习流行框架框架和库和插件的区别一.简介指令v-cloakv-textv-htmlv-pre**v-once**v-onv-on事件函数中传入参数事件修饰符双向数据绑定v-model 按键修饰符自定义按键修饰符别名v-bind(属性…...

配置dns服务的正反向解析

服务端IP客户端IP网址192.168.153.137192.168.153.www.openlab.com 1&#xff1a;正向解析 1.1关闭客户端和服务端的安全软件&#xff0c;安装bind软件 [rootserver ~]# setenforce 0 [rootserver ~]# systemctl stop firewalld [rootserver ~]# yum install bind -y [rootnod…...

小白水平理解面试经典题目LeetCode 71. Simplify Path【Stack类】

71. 简化路径 小白渣翻译 给定一个字符串 path &#xff0c;它是 Unix 风格文件系统中文件或目录的绝对路径&#xff08;以斜杠 ‘/’ 开头&#xff09;&#xff0c;将其转换为简化的规范路径。 在 Unix 风格的文件系统中&#xff0c;句点 ‘.’ 指的是当前目录&#xff0c;…...

电力负荷预测 | 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM)

文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力系统负荷预测模型(Python线性回归、随机森林、支持向量机、BP神经网络、GRU、LSTM) 所谓预测,就是指通过对事物进行分析及研究,并运用合理的方法探索事物的发展变化规律,对其未来发展做出预先估计和判断。…...

YY调音台:音频后期处理

我从事影视后期处理的工作&#xff0c;主要负责音频、音效合成这块工作内容。在影视作品中&#xff0c;声音不仅仅是背景元素&#xff0c;它在叙事和创造情感氛围上发挥着至关重要的作用。我们的工作不仅要让听众听到声音&#xff0c;更要让他们通过声音感受到情感的波动和故事…...

一键部署一个监控系统hertzbeat

效果 特点 一站式监控告警通知&#xff0c;支持应用服务&#xff0c;数据库&#xff0c;操作系统&#xff0c;中间件&#xff0c;云原生&#xff0c;网络等。 易用友好&#xff0c;无需 Agent&#xff0c;全页面操作&#xff0c;鼠标点一点就能监控告警。 强大监控模版能力&…...

为电子表格嵌入数据库,Excel/WPS一键升级为管理系统

将Excel表格转化为管理系统&#xff0c;这款工具能够实现只需导入表格数据&#xff0c;即可自动生成相应的软件和APP。 表格办公的烦恼&#xff0c;有遇到吧&#xff1f; 对于具有一定规模的企业而言&#xff0c;各类表格如同繁星般众多&#xff0c;既有日常使用的常规表格&a…...

搜索与图论(一)(深搜,广搜,树与图的存储遍历,拓扑排序)

一、DFS 往深里搜&#xff0c;搜到叶子结点那里&#xff0c;回溯&#xff0c;到可以继续到叶子结点深搜的位置。 1、回溯一定要恢复现场 2、定义一个与当前递归层数有关的终止条件&#xff08;题目要求的东西&#xff09; 3、每层都用循环判断是否存在可以dfs的路 输出数字…...

【开源】基于JAVA+Vue+SpringBoot的停车场收费系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…...

DDoS攻击激增,分享高效可靠的DDoS防御方案

当下DDoS攻击规模不断突破上限&#xff0c;形成了 "网络威胁格局中令人不安的趋势"。专业数据显示&#xff0c;对比2022年上半年与2023年上半年&#xff0c;所有行业的DDoS攻击频率增加了314%。其中零售、电信和媒体公司遭受的攻击规模最大&#xff0c;三个垂直行业的…...

Vue.Draggable深度解析:源码实现与高级应用实战

Vue.Draggable深度解析&#xff1a;源码实现与高级应用实战 【免费下载链接】Vue.Draggable SortableJS/Vue.Draggable: Vue.Draggable 是 Sortable.js 的 Vue.js 封装组件&#xff0c;提供了拖放排序功能&#xff0c;可以在 Vue 应用中轻松实现列表元素的可拖拽重排。 项目地…...

Java 17 新特性实战:现代 Java 开发的优雅实践

Java 17 新特性实战&#xff1a;现代 Java 开发的优雅实践 前言 大家好。最近很多读者朋友询问 Java 17 的新特性以及如何在项目中应用这些特性。作为一个长期使用 Java 的架构师&#xff0c;今天我想分享一下 Java 17 的新特性以及在实际项目中的应用经验。 Java 17 的核心新特…...

Vision Transformers在密集预测任务中的创新应用与性能优化

1. Vision Transformers如何革新密集预测任务 第一次接触Vision Transformers&#xff08;ViT&#xff09;时&#xff0c;我完全被它的设计哲学震撼到了。传统的CNN在处理图像时&#xff0c;就像用固定大小的网格去观察世界&#xff0c;而ViT则像是一个拥有"全局视野"…...

从‘它好慢’到‘真香’:Vite + Vue 3项目实战中那些让你开发效率翻倍的配置技巧

从‘它好慢’到‘真香’&#xff1a;Vite Vue 3项目实战中那些让你开发效率翻倍的配置技巧 如果你正在使用Vite和Vue 3进行开发&#xff0c;却总觉得构建速度不够快、开发体验不够流畅&#xff0c;或者在某些特定功能配置上卡壳&#xff0c;那么这篇文章就是为你准备的。我们将…...

逆流而上,逐光而行:光伏微逆的技术探索之路

交错反激光伏并网微逆&#xff1a;软件源程序硬件资料详细设计说明文档 产品介绍&#xff1a; 本项目用于单相光伏并网微型逆变器。 前级采用交错反激拓扑生成馒头波&#xff0c;后级采用SCR拓扑反向得到正弦波&#xff0c;带有&#xff1a;MPPT、锁相环、孤岛检测。 本项目支持…...

别再傻傻分不清!STM32定时器里Prescaler和ClockDivision到底谁管心跳谁管滤波?

STM32定时器双频分频机制深度解析&#xff1a;从心跳节拍到信号滤波 第一次接触STM32定时器配置时&#xff0c;看到Prescaler和ClockDivision这两个参数&#xff0c;很多开发者都会产生疑惑——它们看起来都是在做"分频"这件事&#xff0c;为什么需要两个参数&#x…...

Grok-1深度实战指南:3140亿参数混合专家模型的高级部署与优化

Grok-1深度实战指南&#xff1a;3140亿参数混合专家模型的高级部署与优化 【免费下载链接】grok-1 马斯克旗下xAI组织开源的Grok AI项目的代码仓库镜像&#xff0c;此次开源的Grok-1是一个3140亿参数的混合专家模型 项目地址: https://gitcode.com/GitHub_Trending/gr/grok-1…...

告别小白屏!树莓派3.5寸/5寸屏幕驱动安装全攻略(含HDMI/GPIO款区分与镜像下载)

树莓派外接屏幕终极指南&#xff1a;从驱动安装到故障排查一站式解决 树莓派爱好者们常常会遇到一个令人头疼的问题——当你兴冲冲地连接上一块3.5寸或5寸的小屏幕&#xff0c;期待立即开始项目开发时&#xff0c;迎接你的却是一片刺眼的白屏。这种情况在非官方屏幕中尤为常见&…...

硬件工程师转向嵌入式软件开发的十大技巧

嵌入式系统设计&#xff1a;硬件工程师转向软件开发的十大实用技巧1. 引言嵌入式系统设计是硬件与软件紧密结合的领域&#xff0c;硬件工程师在扩展技能到软件开发时&#xff0c;需要建立新的思维模式和工作方法。本文总结了硬件工程师转向软件设计时需要掌握的十大关键技巧&am…...

从航拍影像到三维地形:OpenDroneMap实战指南与常见问题解答

从航拍影像到三维地形&#xff1a;OpenDroneMap实战指南与常见问题解答 【免费下载链接】ODM A command line toolkit to generate maps, point clouds, 3D models and DEMs from drone, balloon or kite images. &#x1f4f7; 项目地址: https://gitcode.com/gh_mirrors/od…...