进程间通讯--消息队列

【回眸】Linux 内核 (十二)进程间通讯 之 消息队列 这个系列的上一篇介绍了进程间通讯关于管道相关的内容及代码实例,本章要介绍关于消息队列相关的内容. 阅读详情

1.  创建消息队列

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>
       int msgget(key_t key, int msgflg);

                   成功返回队列ID,失败返回-1。

参数

说明

key

创建/打开队列key值,由ftok产生,可以直接给常量

msgflg

创建/打开方式IPC_CREAT、IPC_EXCL、IPC_NOWAIT

            通常是msgflg =IPC_CREAT| IPC_EXCL|0666,意思是若不存在key值的队列则创建,否则如果存在则打开队列,0666意思与一般文件权限一样,XXX-本用户,同组用户,其他用户的读写执行的权限。

       # include <sys/types.h>
       # include <sys/ipc.h>
       key_t ftok(const char *pathname, int proj_id);

//获取pathname相对应的一个键值, pathname必须是存在并且可读取的文件,proj_id表示序号,用来区别同时的存在文件。成功返回key值,失败返回-1。

          

2.  队列读写

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>

a)         读取数据――阻塞读取消息队列,直到解除阻塞。

ssize_t msgrcv(int msqid, struct msgbuf *msgp, size_t msgsz, long msgtyp, int msgflg);

参数

说明

msqid

已打开的消息队列id

msgp

接收存放的消息队列缓存结构

msgsz

消息数据长度

msgtyp

消息类型。=0返回队列中的第一个消息;>0返回队列中类型为msgtyp的第一个消息;<0返回队列中消息类型<=msgtyp绝对值的消息,如果有若干个去最小的。

msgflg

读取标志通常使用IPC_NOWAIT:即没有满足条件的消息,立即返回,此时,错误代码errno=ENOMSG

IPC_EXCEPT:与msgtyp>0配合使用,返回队列中第一个类型不为msgtyp的消息

MSG_NOERROR:截断超长数据

缓冲内容结构如下:

struct msgbuf {
long mtype;    /* 消息类型 must be > 0 */
char mtext[1]; /* 消息数据 这里只是一个数组的首地址,并非是只有一个字符 */
            };

msgrcv()解除阻塞的条件三个条件:

1.  消息队列中有了满足条件的消息(或使用了);

2.  msqid代表的消息队列被删除;

3.  调用msgrcv()的进程被信号中断;

a)         发送数据

int msgsnd(int msqid, struct msgbuf *msgp, size_t msgsz, int msgflg);

参数

说明

msqid

已打开的消息队列id

msgp

发送存放的消息队列缓存结构

msgsz

消息数据长度

msgflg

消息类型。=0 读取队列中第一个数据。

 

 

 

3.  消息队列控制

       #include <sys/types.h>
       #include <sys/ipc.h>
       #include <sys/msg.h>    
       int msgctl(int msqid, int cmd, struct msqid_ds *buf);

          成功返回0,失败返回-1。

参数

说明

msqid

已打开的消息队列id

cmd

控制类型选项

IPC_STAT:取得队列状态

IPC_SET:设置队列属性

IPC_RMID:删除消息队列

buf

存放队列的属性结构

 

       队列属性如下:

struct msqid_ds
{
  struct ipc_perm msg_perm; /* structure describing operation permission */
  __time_t msg_stime; /*最后一次发送消息的时间 */
  unsigned long int __unused1; /*保留*/
  __time_t msg_rtime; /* 最后一次接收数据时间 */
  unsigned long int __unused2;     /*保留*/
  __time_t msg_ctime; /* 最后修改时间 */
  unsigned long int __unused3; /*保留*/
  unsigned long int __msg_cbytes; /* 当前队列字节数 */
  msgqnum_t msg_qnum; /* 当前队列的消息数 */
  msglen_t msg_qbytes; /* 队列中容量 */
  __pid_t msg_lspid; /* 最后发送消息的进程号 */
  __pid_t msg_lrpid; /* 最后接收队列的进程号*/
  unsigned long int __unused4; /*保留*/
  unsigned long int __unused5; /*保留*/
};

从翼型到湍流:用生活化案例图解空气动力学核心概念(中英双语版) 本文通过飞机机翼、F1赛车、高尔夫球等生活化案例,图解空气动力学核心概念。深入浅出地解释了攻角如何产生升力、边界层与流动分离如何影响阻力、马赫数如何划分速度世界,以及涡流与湍流的特性与应用。文章还介绍了计算流体动力学(CFD)这一现代数字风洞工具,帮助读者直观理解这些塑造现代交通与运动设计的无形之力。 阅读详情

相关推荐

VSCode玩转STM32:手把手教你配置EIDE插件与OpenOCD调试(附野火DAP配置文件详解)

本文详细介绍了如何在VSCode中配置EIDE插件与OpenOCD进行STM32开发,特别针对野火DAP调试器提供了配置文件详解。从基础环境搭建到深度调试技巧,帮助开发者高效完成STM32项目开发,实现现代化嵌入式开发工作流。

weixin_26905487的博客 553

使用消息队列,完成单机QQ功能(msgsnd)

消息队列 第一步创建key值 使用ftok()函数来获得唯一的信息队列标识符 ------------------------------------- key_t key = ftok("./",2021); if(-1 == key) { perror("ftok"); } 创建或者打开消息队列 创建消息队列,如果已经有了这个队列,那么就是打开 int msgid=msgget(key,IPC_CREAT|0666); IPC_CREAT:如果没有那么就创建 if(-1 == msgid

ZHOUJIforever的博客 401

【论文精读】DisCo: Graph-Based Disentangled Contrastive Learning for Cold-Start Cross-Domain Recommendat

源域中具有相似偏好的用户在目标域中可能会表现出不同的兴趣。因此,直接迁移嵌入可能会引入不相关的源域协同信息。提出了一个基于图的解耦对比学习框架,以捕捉细粒度的用户意图并过滤掉不相关的协同信息,从而避免负迁移。 具体而言,对于每个域,我们使用多通道图编码器来捕捉多样化的用户意图。然后,我们在嵌入空间中构建亲和图,并执行多步随机游走以捕捉高阶用户相似性关系。将一个域视为目标域,我们提出了一种以用户相似性为指导的解耦意图对比学习方法,以优化跨域的用户意图桥接。

qq_52342142的博客 1227

进程间通讯--消息队列

         进程间通讯--消息队列  1.  创建消息队列       #include sys/types.h>       #include sys/ipc.h>       #include sys/msg.h>       int msgget(key_t key, int msgflg);                   成功

hanchaoman的专栏 1180

sap资产post记录查询时候 报错 如图

SAP资产过账查询报错AA653解决方案摘要 错误原因:系统无法计算会计年度期间的最后一天,导致资产折旧/过账失败。常见原因包括:1)未创建2025年期间版本;2)期间日期映射不完整;3)依赖日历但未生成2025年日历。 解决方法: 通过OB37维护2025年12/13个完整期间 补充缺失期间或修正结束日期 使用SCAL生成2025年工厂日历 验证步骤: 检查T009R表2025年记录完整性 测试AFAB折旧运行 重新查询资产过账 提示:建议财务团队统一维护跨年度期间数据,并在测试系统验证变更。

金牌架构师 834

实现两端固支梁热力耦合的有限元分析

在本文中,我们将使用Matlab实现两端固支梁的热力耦合有限元分析。我们假设梁的材料是均匀的,梁的截面积为1,长度为1,两端固支,且受到均匀分布的热荷载。接下来,我们需要组装全局刚度矩阵和热传导矩阵。对于两个相邻的元素,它们共享一个节点,因此需要使用连接矩阵将局部矩阵组装成全局矩阵。接下来,我们需要定义元素刚度矩阵和热传导矩阵。然后,我们需要定义载荷向量。然后,我们需要定义边界条件。在这个例子中,梁的两端固支,因此我们需要将两端节点的位移限制为0。最后,我们需要解决线性方程组,得到节点的位移和温度分布。

CyberSparkZ的博客 396

linux 进程间通信详解

信号量是一个特殊的变量,它被用于进程的同步与互斥,而不是交换数据信息,它的值与相应资源的使用情况有关,值大于 0 时,表示当前可用的资源数的数量;值小于 0 时,其绝对值表示等待使用该资源的进程个数;只允许等待操作(P操作)和发送操作(V操作)。linux终端下输入命令“ipcs -s”可查看信号量信息。二值信号量是我们用的最多的,只有“0”和“1”两个值。以下仅根据二值信号量说明。p操作:如果信号量的值大于0,执行p操作就给信号量减1;如果信号量等于0,执行p操作进程挂起等待。v操作。

Qurry的博客 899

C3 模块与普通 Bottleneck 堆叠区别

维度普通 Bottleneck 堆叠C3 模块设计理念残差学习CSP + 特征分治信息路径单一路径双路径(主干 + bypass)融合方式相加(Add)拼接(Concat)+ 卷积计算效率较低高(通道减半)特征保留弱(多次非线性)强(直连保留原始信息)梯度传播单一主路径多样化、更稳定任务适配通用(分类为主)专为目标检测优化可扩展性有限极强(即插即用各种模块)实际性能基准线显著优于(尤其在小目标和效率方面)

浩瀚之水的专栏 107

Linux-C 进程通信之system-V IPC

Linux-C 进程通信之system-V IPC 一、简述 记--简单的system-VIPC 例子。其中包括消息队列、共享内存、信号量。 多进程间使用IPC对象进行通信。有一个key值唯一标识这个IPC对象。 使用命令:ipcs -a 来查看所有IPC对象 或者使用:ipcs -q 查看消息队列...

Genven_Liang的博客 2655

使用plot函数可视化F分布累积分布函数数据(R语言)

在上面的代码中,我们使用了seq()函数来生成从0到5之间,以0.1为步长的一组F值。然后,我们指定了分子自由度为3,分母自由度为8,并使用pf()函数计算了对应的F分布CDF值。在本文中,我们将介绍如何使用R语言的plot函数来可视化F分布的累积分布函数(CDF)数据。通过使用plot函数,我们可以直观地了解F分布的累积分布函数,并对F值和对应的累积概率之间的关系有更深入的认识。运行上述代码后,我们将获得一个由F值和对应的累积概率构成的图形,其中x轴表示F值,y轴表示累积概率。

LogicGuruX的博客 502

49、Linux内核内存管理:MGLRU、DAMON与OOM杀手详解

本文详细解析了Linux内核内存管理中的三大核心机制:MGLRU(多代LRU)页面追踪与回收机制、DAMON数据访问监控工具及其在内存优化中的应用,以及OOM(内存不足)杀手的工作原理和触发方式。同时,文章还介绍了VM overcommit_memory策略的设置及其对内存分配的影响,帮助开发者和系统管理员更好地理解Linux内存管理机制,从而优化系统性能和稳定性。

dropout6artist的博客 108

linux系统中进程之间的通信

linux系统中进程间通信,pipe(管道),mmap(共享映射区),msgget(消息队列),signal(信号),进程间通信的本质。

qq_67637756的博客 681

微信小程序 - 实现大文件上传分片/切片+本地选择文件上传超大文件,小程序大文件切片上传+断点续传+上传进度条+失败自动重传完整运行示例源码,支持图片、视频、文档各种文件(支持上传单个文件或批量上传)

微信小程序实现大文件上传,实现分片大文件上传,微信小程序 分片 断点续传 大文件上传,微信小程序实现大文件上传 分片上传 进度条,小程序文件分片上传,微信小程序如何上传很大的文件,在选择文件后,按指定大小将文件切割成独立的文件片,并逐片上传,uniapp 微信小程序上传大文件如何切片,微信小程序实现大文件分片上传、断点续传、秒传,解决大文件上传问题,大文件上传如何做断点续传,微信小程序wx.uploadFile,小程序上传视频,小程序上传文档,实现大文件上传(切片上传)实现大文件上传到服务器教程,支持批量多

🏆 前端领域优质创作者 1万+

进程间通讯—消息队列

(进程间通讯的手段)消息队列是System V IPC对象的一种消息队列由消息队列ID来唯一标识消息队列就是一个消息的列表。用户可以在消息队列中添加消息、读取消息等消息队列可以按照类型来发送/接收消息概念:消息队列是System V IPC对象的一种内核中的数据结构(通过链表实现)发送端:1 申请Key2打开/创建消息队列 msgget3向消息队列发送消息 msgsnd接收端:1打开/创建消息队列 msgget2从消息队列接收消息 msgrcv。

weixin_64737319的博客 976

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

【Linux】进程间通讯-消息队列

消息队列是一种进程间通信机制,本质上是内核提供的链表数据结构。发送进程向队列插入消息节点,接收进程则删除节点读取数据。消息结构包含类型标识符(mtype)和正文(mtext),大小受系统限制(MSGMAX/MSGMNB)。关键操作包括:msgget创建队列、msgsnd发送数据、msgrcv接收数据、msgctl控制队列。使用时需定义消息缓冲区结构,通过msgtype区分消息类型。生产者-消费者模式中,双方需约定相同的IPCKEY标识队列。示例代码展示了队列创建、消息发送/接收及队列删除的完整流程,可通过i

Antonio915的博客 1075

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

【Linux】进程间通讯之消息队列

上一篇博客我们说到进程间通讯之管道的应用,这篇博客我们主要说一下进程间通讯之消息队列。 一、消息队列的概念 1、消息:类型+数据 2、队列:先进先出的特点,也是一种优先级队列 二、相关的函数 1、int msgget():用来创建或访问一个消息队列 它的函数原型是: int msgget((key_t)key, int flag); msgget():成功返回内核对象的ID值,失败返回-1...

qq_43411563的博客 369

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

进程间通讯之消息队列

1.概念 由内核创建的用于存放消息的链表,分为:System V消息队列,Posix消息队列。消息队列提供了一种从一个进程向另一个进程发送一个数据块的方法。 每个数据块都被认为含有一个类型,接收进程可以独立地接收含有不同类型的数据结构。我们可以通过发送消息来避免命名管道的同步和阻塞问题。但是消息队列与命名管道一样,每个数据块都有一个最大长度的限制。 2.特点 优点: 1)我们可以通过发送消息来几...

qq_43669302的博客 233

进程间通讯-信号(三)、-消息队列

inode 节点号 :每个存在的⽂件操作系统都会有唯⼀的编号, 通过 ls - i 命令查看。创建两个⼦进程 A 与 B,⽗进程分别给两个⼦进程发型消息,消息类型为 100 与 200。探测⽤户是否已经输⼊,如果⽤户在 3 秒内没有输⼊则提示超时⼀次, 如果超时三次程序⾃动。⼦进程退出是异步事件, 可以利⽤在⼦进程退出时,会⾃动给⽗进程发送 SIGCHLD 信。消息队列具有⼀定的 FIFO 特性, 具有⽆名管道与有名管道的各⾃的优势,消息队列就是⼀个消息的列表, 进程可以在消息队列中添加消息和的读取消息。

interese的博客 642

进程间的通讯---消息队列

进程间的通讯—消息队列 消息队列MessageQueue:消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。 特点: I.是消息的链表。具有特定的格式,存放在内存当中,由消息队列标识符标识。 II.消息队列允许一个或者多个进程向他写入与读取消息。 III.消息队列可实现消息的随机查询,不一定要以先...

star_fighting的博客 285

Linux下进程间通讯-消息队列《一》

开发环境 Red Hat Enterprise Linux Server release 7.0 (Maipo) 参考书籍 《UNIX环境高级编程》 关于消息队列知识的编程应用: https://blog.youkuaiyun.com/qq_42418668/article/details/95192660 消息队列 消息队列时消息的链接表,存放在内核中并由消息队列标识符标识。 我们都知道每个...

GoingJack博客 171

Linux系统下进程间利用消息队列实现广播和点对点通讯(C语言)

进程间消息队列实现广播和点对点通讯 实现功能:利用程序生成4个可执行程序,A、B、C、D 实现他们之间互发消息和群发消息。 用到的内容:线程,消息队列 程序实现流程图 用到的主要函数及其说明 1.ftok函数 key_t ftok(const char *pathname, int proj_id); 需要的头文件 #include <sys/types.h> #include &l...

weixin_43701705的博客 2363

进程(三):进程间通讯:消息队列

消息对列

Linux 593

linux进程间通讯(IPC)——消息队列(系统V)

系统V消息队列的使用,介绍了ftok函数、msgget函数、msgrcv函数,以及它们的使用方法。

yohe12的博客 506

用消息队列实现进程间通讯

用消息队列实现进程间通讯 程序也就是这么个程序,能够实现进程间通讯,自己也是费了不少功夫想出来的,感觉设计确实是比实现复杂不少。发到这里当个备份吧。 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <unistd.h> 4 #...

weixin_30482383的博客 121

Linux进程间通讯----管道,消息队列,信号量,共享内存

Linux进程间通讯手段主要有:管道,消息队列,信号量,共享内存,不同网络之间之间通讯会使用socket。 管道: 管道主要通过文件系统的辅助来实现通讯,有两种方式:有名管道与无名管道。 有名管道在磁盘上有一个管道文件标识,但是其进行数据交互时,并不占用磁盘空间,仅在磁盘上存在一个文件i-node节点信息。 有名管道的创建: mafifo filename或 int mkfifo(char* f...

weixin_43611545的博客 475

进程间通讯的消息队列和共享内存方式的实现

qt,进程间通讯,消息传递模式,共享内存模式

阿木的专栏 3647
上一篇: C语言常用宏定义
下一篇: fc9VMware虚拟机时间同步
lhf0921
博客等级 码龄18年 52粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值