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

5、操作系统——进程间通信(3)(system V-IPC:消息队列)

目录

1、管道的缺点

2、消息队列

3、消息队列的API

  (1)获取消息队列的ID(类似文件的描述符)(msgget)

  (2)发送、接收消息(msgrcv)

    (3)获取和设置消息队列的属性(msgctl)

4、消息队列的使用方法

(1)发送者

(2)接收者

1、管道的缺点

(1)无法读取一个“指定”的数据,因为数据没有标记,故只能按次序挨个读取

(2)多对进程之间的相互通信,要用多对管道分别处理

2、消息队列

(1)有数据标识的特殊管道,每一段被写入的数据都变成带标识的消息。

(2)读取消息的进程只要指定标识就可以正确读取,而不会受到其他消息干扰

(3)从运行效果看,一个带标识的消息队列,就像多条并存的管道

3、消息队列的API

(1)获取消息队列的ID(类似文件的描述符)(msgget)

 (2)发送、接收消息(msgrcv)

a、发送消息时,消息必须被组织成以下形式

struct msgbuf
{long mtype; // 消息的标识char mtext[1]; // 消息的正文 可以是任何类型数据
};

发送出去的消息必须以一个 long 型数据打头,作为该消息的标识,后面的数据则没有要求。

b、消息的标识可以是任意长整型数值,但不能是 0L。

c、参数 msgsz 是消息中正文的大小,不包含消息的标识。

(3)获取和设置消息队列的属性(msgctl)

4、消息队列的使用方法

(1)发送者

A) 获取消息队列的 ID

B) 将数据放入一个附带有标识的特殊的结构体,发送给消息队列。

#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <sys/msg.h>struct msgbuf
{long mtype; // 【重点】消息的标识int num ; // 消息的正文 可以是任何类型数据
};int main(int argc, char const *argv[])
{// 获得KEY值key_t key =  ftok("./",  1 );printf("key:%d\n" , key );// 获得消息队列的ID int ID = msgget( key , IPC_CREAT | 0644 );printf("消息队列ID 为:%d \n " , ID );// 配置消息struct msgbuf msg = {.mtype = 'X',  // 设置消息数据的类型(标识).num = 1024   // 实际发送的信息};// 发送消息msgsnd(ID , &msg , sizeof(msg.num), MSG_NOERROR);// 标记删除msgctl(ID , IPC_RMID , NULL );return 0;
}

(2)接收者

A) 获取消息队列的 ID

B) 将指定标识的消息读出。

#include <sys/types.h>
#include <sys/ipc.h>
#include <stdio.h>
#include <sys/msg.h>struct msgbuf
{long mtype; // 【重点】消息的标识int num ; // 消息的正文 可以是任何类型数据
};int main(int argc, char const *argv[])
{// 获得KEY值key_t key =  ftok("./",  1 );printf("key:%d\n" , key );// 获得消息队列的ID int ID = msgget( key , IPC_CREAT | 0644 );printf("消息队列ID 为:%d \n " , ID );// 配置消息struct msgbuf msg = {0};// 接收消息// int  msg  ; int ret_val = msgrcv( ID , &msg, sizeof(msg.num), 'X', MSG_NOERROR );printf("ret:%d msg:%d\n" , ret_val, msg.num );// 标记删除msgctl(ID , IPC_RMID , NULL );return 0;
}

相关文章:

5、操作系统——进程间通信(3)(system V-IPC:消息队列)

目录 1、管道的缺点 2、消息队列 3、消息队列的API &#xff08;1&#xff09;获取消息队列的ID&#xff08;类似文件的描述符&#xff09;(msgget) &#xff08;2&#xff09;发送、接收消息(msgrcv) (3)获取和设置消息队列的属性&#xff08;msgctl&#xff09; 4、消息队…...

C++vector容器用法详解

一、前言vector 是封装动态数组的顺序容器&#xff0c;连续存储数据&#xff0c;所以我们不仅可以通过迭代器访问存储在 vector 容器中的数据&#xff0c;还能用指向 vector 容器中的数据的常规指针访问数据。这意味着指向 vector 容器中的数据的指针能传递给任何期待指向数组元…...

Log4j2的Loggers详解

引言 官方配置文档&#xff1a;https://logging.apache.org/log4j/2.x/manual/filters.html Loggers节点 Loggers节点常见的有两种:Root和Logger <Loggers><Logger name"org.apache.logging.log4j.core.appender.db" level"debug" additivity&qu…...

计算机视觉的应用1-OCR分栏识别:两栏识别三栏识别都可以,本地部署完美拼接

大家好&#xff0c;我是微学AI&#xff0c;今天给大家带来OCR的分栏识别。 一、文本分栏的问题 在OCR识别过程中&#xff0c;遇到文字是两个分栏的情况确实是一个比较常见的问题。通常情况下&#xff0c;OCR引擎会将文本按照从左到右&#xff0c;从上到下的顺序一行一行地识别…...

低代码平台如何选型, 43款国内外低代码平台一网打尽

目前&#xff0c;零代码技术和低代码技术越来越成熟&#xff0c;低代码平台也越来越被大家所接受&#xff0c;国内低代码平台厂商和产品层出不穷&#xff0c;到底哪家低代码平台好&#xff0c;企业如何选型&#xff0c;以下给出一些参考。 一、低代码平台如何选型 企业如何选…...

第六周作业(1.5小时)

一、PreparedStatement PreparedStatement也可以用来执行sql语句&#xff0c;但是需要注意&#xff1a;它需要用sql创建好PreparedStatement&#xff0c;而Statement不需要用sql来创建。 优点&#xff1a; 1、具有较好的可维护性和可读性&#xff0c;参数的分别插入减少了错…...

排序 (蓝桥杯) JAVA

目录题目描述&#xff1a;冒泡排序算法(排序数字&#xff0c;字符)&#xff1a;String与String buffer的区别:纯暴力破解(T到爆炸)&#xff1a;暴力破解加思考(bingo)&#xff1a;总结&#xff1a;题目描述&#xff1a; 小蓝最近学习了一些排序算法&#xff0c;其中冒泡排序让他…...

【Blender 水墨材质】实现过程剖析01

写在前面 想把Blender一位大佬演示的Blender水墨材质过程&#xff0c;在Unity用Shader重现&#xff0c;过程中会拿能拿到的节点代码举例&#xff08;ShaderGraph或者UE的都会有&#xff09;。第一步当然是要跟着人家做一遍&#xff01;我会尽可能地分析一下每一步的原理~ 教程…...

代码随想录算法训练营第五十六天|583. 两个字符串的删除操作、72. 编辑距离

​ LeetCode 583 两个字符串的删除操作 题目链接&#xff1a;https://leetcode.cn/problems/delete-operation-for-two-strings/ 思路&#xff1a; 方法一:两个子串同时删除元素 dp数组的含义 dp[i][j]dp[i][j]dp[i][j]代表以i-1为结尾的字符串word1&#xff0c;和以j-1位结…...

【ArchLinux】【KDE】Archlinux的安装与使用

文章目录开头前言所需环境演示环境相关链接安装教程在Windows环境下制作启动盘进入ArchLinux Live环境安装为硬盘分区如何新建分区&#xff1f;分区表格式化分区分区完成&#xff0c;开始安装挂载分区切换镜像源安装基本系统设置将Live环境&#xff08;当前&#xff09;挂载信息…...

Go语言精修(尚硅谷笔记)第六章

六、函数、包和错误处理 6.1 函数概念 不用函数的弊端 1&#xff09;写法可以完成功能, 但是代码冗余 2 ) 同时不利于代码维护 概念&#xff1a;为完成某一功能的程序指令(语句)的集合,称为函数。 在Go中,函数分为: 自定义函数、系统函数 基本语法 //函数的基本语法 fu…...

Photoshop的功能

Photoshop是一款功能强大的图片编辑软件&#xff0c;它提供了数百种不同的工具和特效&#xff0c;让您可以编辑图片、创建图形和设计网页等。 以下是Photoshop的一些主要功能&#xff1a; 1.图层&#xff1a;Photoshop允许您创建多个图层&#xff0c;让您可以在每一个图层上进…...

C++初阶——内存管理

目录 1. C/C内存分布 2. C语言中动态内存管理方式&#xff1a;malloc/calloc/realloc/free 3. C内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 4. operator new与operator delete函数 重要 4.1 operator new与operator delete函数&#xff08…...

uds服务汇总

还有一些服务列举在下面&#xff1a; RequestDownload&#xff08;服务ID为0x34&#xff09;和RequestUpload&#xff08;服务ID为0x35&#xff09;&#xff1a;这两个服务用于在ECU和诊断器之间进行数据传输。通过 RequestDownload服务&#xff0c;诊断器可以请求ECU接收一些数…...

【深度学习】2023李宏毅homework1作业一代码详解

研一刚入门深度学习的小白一枚&#xff0c;想记录自己学习代码的经过&#xff0c;理解每行代码的意思&#xff0c;这样整理方便日后复习也方便理清自己的思路。感觉每天时间都不够用了&#xff01;&#xff01;加油啦。 第一部分&#xff1a;导入模块 导入各个模块&#xff0…...

【软件测试】基础知识第二篇

文章目录一. 开发模型1. 瀑布模型2. 螺旋模型3. 增量和迭代模型3.1 增量模型3.2 迭代模型3.3 增量和迭代模型的区别4. 敏捷模型4.1 敏捷宣言4.2 scrum模型二. 开发模型V 模型W 模型一. 开发模型 1. 瀑布模型 瀑布模型在软件工程中占有重要地位&#xff0c;是所有其他模型的基…...

Java中File类以及初步认识流

1、File类操作文件或目录属性 &#xff08;1&#xff09;在Java程序中通过使用java.io包提供的一些接口和类&#xff0c;对计算机中的文件进行基本的操作&#xff0c;包括对文件和目录属性的操作、对文件读写的操作&#xff1b; &#xff08;2&#xff09;File对象既可以表示…...

【C语言】文件操作详细讲解

本章要分享的内容是C语言中文件操作的内容&#xff0c;为了方便大家学习&#xff0c;目录如下 目录 1.为什么要使用文件 2.什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3.文件的打开和关闭 3.1文件指针 3.2打开和关闭 4.文件的顺序读写 4.1顺序读写函数介绍…...

爱奇艺万能联播使用教程

众所周知&#xff0c;爱奇艺是百度旗下的一款产品&#xff0c;所以今天用爱奇艺万能联播的方法实现下载百度网盘&#xff0c;并没有破解百度网盘&#xff0c;是官方正版下载渠道。软件是官方版本&#xff0c;大家双击安装即可。 安装完成以后&#xff0c;在软件中就有了“访问网…...

真题讲解-软件设计(三十七)

数据流图DFD&#xff08;真题讲解&#xff09;-软件设计&#xff08;三十六&#xff09;https://blog.csdn.net/ke1ying/article/details/129803164 在网络安全管理中&#xff0c;加强内防内控可采取的策略是&#xff1f; 终端访问权限&#xff0c;防止合法终端越权访问。加强…...

如何在看板中体现优先级变化

在看板中有效体现优先级变化的关键措施包括&#xff1a;采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中&#xff0c;设置任务排序规则尤其重要&#xff0c;因为它让看板视觉上直观地体…...

2024年赣州旅游投资集团社会招聘笔试真

2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils&#xff1a; ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类&#xff0c;封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz&#xff0c;先构建任务的 JobD…...

Frozen-Flask :将 Flask 应用“冻结”为静态文件

Frozen-Flask 是一个用于将 Flask 应用“冻结”为静态文件的 Python 扩展。它的核心用途是&#xff1a;将一个 Flask Web 应用生成成纯静态 HTML 文件&#xff0c;从而可以部署到静态网站托管服务上&#xff0c;如 GitHub Pages、Netlify 或任何支持静态文件的网站服务器。 &am…...

GitHub 趋势日报 (2025年06月08日)

&#x1f4ca; 由 TrendForge 系统生成 | &#x1f310; https://trendforge.devlive.org/ &#x1f310; 本日报中的项目描述已自动翻译为中文 &#x1f4c8; 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...

实战设计模式之模板方法模式

概述 模板方法模式定义了一个操作中的算法骨架&#xff0c;并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下&#xff0c;重新定义算法中的某些步骤。简单来说&#xff0c;就是在一个方法中定义了要执行的步骤顺序或算法框架&#xff0c;但允许子类…...

OCR MLLM Evaluation

为什么需要评测体系&#xff1f;——背景与矛盾 ​​ 能干的事&#xff1a;​​ 看清楚发票、身份证上的字&#xff08;准确率>90%&#xff09;&#xff0c;速度飞快&#xff08;眨眼间完成&#xff09;。​​干不了的事&#xff1a;​​ 碰到复杂表格&#xff08;合并单元…...

对象回调初步研究

_OBJECT_TYPE结构分析 在介绍什么是对象回调前&#xff0c;首先要熟悉下结构 以我们上篇线程回调介绍过的导出的PsProcessType 结构为例&#xff0c;用_OBJECT_TYPE这个结构来解析它&#xff0c;0x80处就是今天要介绍的回调链表&#xff0c;但是先不着急&#xff0c;先把目光…...