目录

一、消息队列的定义

二、相关函数 

2.1 msgget 函数

2.2 msgsnd 函数

2.3 msgrcv 函数

2.4 msgctl 函数

三、消息队列的操作

 3.1 创建消息队列

3.2 获取消息队列并发送消息 

3.3 从消息队列接收消息recv 

四、 删除消息队列

4.1 ipcrm

4.2 msgctl函数 


一、消息队列的定义

消息队列是一种用于在应用程序之间传递和存储数据的通信机制。它允许应用程序将消息发送到队列中,然后由另一个应用程序从队列中接收和处理这些消息。消息队列可以有效地实现异步通信、解耦应用程序之间的依赖关系,以及实现消息的持久化和顺序处理。常见的消息队列系统包括RabbitMQ、Kafka、ActiveMQ等。消息队列在现代分布式系统和微服务架构中被广泛应用。

二、相关函数 

2.1 msgget 函数

msgget()创建或者获取一个消息队列

函数模型:

int msgget(key_t key,int msqflg);

函数参数:

        1.msqflg: IPC_CREAT

返回值:
         msgget()成功返回消息队列 ID,失败返回-1

2.2 msgsnd 函数

函数模型:

int msgsnd(int msqid, const void *msqp, size_t msqsz, int msqflg);
msgsnd()发送一条消息,消息结构为:
struct msgbuf
{
        long mtype; // 消息类型, 必须大于 0
        char mtext[1]; // 消息数据
}
函数参数:
         1.msqsz: 指定 mtext 中有效数据的长度
        2.msqflg:一般设置为 0 可以设置 IPC_NOWAIT
返回值:
        msgsnd()成功返回 0, 失败返回-1

2.3 msgrcv 函数

msgrcv() 接收一条消息

函数模型:

ssize_t msgrcv(int msqid, void *msgp, size_t msqsz, long msqtyp, int msqflg);

函数参数:

         1.msqtyp: 指定接收的消息类型,类型可以为 0
        2.msqflg: 一般设置为 0 可以设置 IPC_NOWAIT
返回值:
         msgrcv()成功返回 mtext 中接收到的数据长度, 失败返回-1

2.4 msgctl 函数

msgctl() 控制消息队列

函数模型:

int msgctl(int msqid, int cmd, struct msqid_ds *buf);

 函数参数:

        cmd: IPC_RMID
返回值:
        msgctl()成功返回 0,失败返回-1

三、消息队列的操作

 3.1 创建消息队列

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/msg.h>int main()
{int msgid=msgget((key_t)1234,IPC_CREAT|0600);if(msgid==-1){printf("msgid err\n");exit(1);}}

通过ipcs 命令查看是否已经创建好了消息队列

3.2 获取消息队列并发送消息 

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/msg.h>struct mess
{long type;char buff[32];
};int main()
{int msgid=msgget((key_t)1234,IPC_CREAT|0600);if(msgid==-1){printf("msgid err\n");exit(1);}struct mess dt;dt.type=1;//1类型消息strcpy(dt.buff,"hello1");msgsnd(msgid,(void*)&dt,32,0);}

 ipcs -q 只显示消息队列

 ipcs -m 只显示共享内存

 ipcs -s 只显示信号量

msgsnd 函数 发送消息:
msgsnd(msgid, &dt, 32, 0); 使用 msgsnd 函数向消息队列发送消息。

msgid 是之前通msgget 获取的消息队列标识符;

msgid是往哪个消息队列中添加;
&dt 是指向要发送的消息结构体的指针;
32 是要发送的消息数据的长度;
0 是消息发送的标志,这里使用默认值。

3.3 从消息队列接收消息recv 

#include<stdio.h>
#include<stdlib.h>
#include<unistd.h>
#include<string.h>
#include<sys/msg.h>struct mess
{long type;char buff[32];
};int main()
{int msgid=msgget((key_t)1234,IPC_CREAT|0600);if(msgid==-1){printf("msgid err\n");exit(1);}struct mess dt;msgrcv(msgid,&dt,32,1,0);printf("recv:%s\n",dt.buff);
}

运行此文件,会发现消息队列数会随执行的次数增加而减少

并且运行三次之后消息读完了再运行会堵塞

四、 删除消息队列

4.1 ipcrm

删除消息队列中的消息用 ipcrm -q msqid 的号。

4.2 msgctl函数 

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/msg.h>struct mess 
{long type; char buff[32]; 
};int main() 
{int msgid = msgget((key_t)1234, IPC_CREAT|0600);if (msgid == -1) {printf("msgget err\n");exit(1);}struct mess dt;msgrcv(msgid, &dt, 32, 2, 0);//意思读2号消息printf("read msg:%s\n", dt.buff);//打印消息msgctl(msgid,IPC_RMID,NULL);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/76047.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/76047.shtml
英文地址,请注明出处:http://en.pswp.cn/web/76047.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯常考排序

1.逆序 Collections.reverseOrder() 方法对列表进行逆序排序。通过 Collections.sort() 方法配合 Collections.reverseOrder()&#xff0c;可以轻松实现从大到小的排序。 import java.util.ArrayList; // 导入 ArrayList 类&#xff0c;用于创建动态数组 import java.util.C…

ILGPU的核心功能使用详解

什么是ILGPU? ILGPU 是一种用于高性能 GPU 程序的新型 JIT&#xff08;即时&#xff09;编译器 &#xff08;也称为 kernels&#xff09;编写的 .基于 Net 的语言。ILGPU 完全 用 C# 编写&#xff0c;没有任何原生依赖项&#xff0c;允许您编写 GPU 真正可移植的程序。…

金融的未来

1. DeFi的爆发式增长与核心使命 DeFi&#xff08;去中心化金融&#xff09;的使命是重构传统金融基础设施&#xff0c;通过区块链技术实现更高的透明度、可访问性、效率、便利性和互操作性。其增长数据印证了这一趋势&#xff1a; TVL&#xff08;总锁定价值&#xff09;爆炸…

在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法,支持 npm/yarn/pnpm 等主流工具

以下是 在Vue项目中查询所有版本号为 1.1.9 的依赖包名 的具体方法&#xff0c;支持 npm/yarn/pnpm 等主流工具&#xff1a; 一、使用 npm 1. 直接过滤依赖树 npm ls --depth0 | grep "1.1.9"说明&#xff1a; npm ls --depth0&#xff1a;仅显示直接依赖&#xf…

其利天下即将亮相第21届(顺德)家电电源与智能控制技术研讨会

2025年4月25日&#xff0c;第21届&#xff08;顺德&#xff09;家电电源与智能控制技术研讨会即将拉开帷幕&#xff0c;其利天下应大比特之邀&#xff0c;确认将参加此次研讨会。 本次研讨会&#xff0c;我司委派研发总监冯建武先生围绕《重新定义风扇驱动&#xff1a;一套算法…

阿里云OSS

目录 第三方服务-通用思路 SDK 准备工作 阿里云OSS-入门程序 .putObject 如何拿到文件对应的字节数组&#xff1f; .readAllBytes&#xff08;&#xff09; 集成阿里云OSS完成文件上传 引入阿里云OSS文件上传的工具类 上传文件接口开发 .getOriginalFilename() 程序…

李宏毅NLP-4-语音识别part3-CTC

Connectionist Temporal Classification&#xff5c;CTC 基于连接主义时间分类&#xff08;CTC&#xff09;的语音识别架构&#xff0c;具体描述如下&#xff1a; 输入层&#xff1a;底部的 x 1 , x 2 , x 3 , x 4 x^1, x^2, x^3, x^4 x1,x2,x3,x4代表输入的语音信号分帧数据…

如何构建类似云数据仓库 Snowflake 的本地数据仓库?

目录 一、Snowflake 架构的三大核心价值 二、本地数据仓库要“像 Snowflake”&#xff0c;关键在数据服务化 三、SQL2API&#xff1a;本地数据服务共享的核心引擎 ✅ 什么是 SQL2API&#xff1f; ✅ 为什么是构建本地类 Snowflake 架构的关键&#xff1f; 四、QuickAPI&a…

设计模式 - 单例模式

一个类不管创建多少次对象&#xff0c;永远只能得到该类型一个对象的实力 常用到的&#xff0c;比如日志模块&#xff0c;数据库模块 饿汉式单例模式&#xff1a;还没有获取实例对象&#xff0c;实例对象就已经产生了 懒汉式单例模式&#xff1a;唯一的实例对象&#xff0c;…

【Windows Cmake工程配置Boost库】

Windows Cmake工程配置Boost库 背景配置流程1. 下载Boost库2. 配置环境变量3. 修改CmakeLists背景 Windows环境下使用cmake开发程序,如图需要用到boost库,但是从官网下载的boost库源码没有编译成功,于是从网上下载boost预编译库,直接配置。 配置流程 1. 下载Boost库 官…

长期坚持的本质,看重休息,看轻自律

01 你有没有这样的经历&#xff0c; 年初立下减肥20斤、读完100本书、旅行10次等目标&#xff0c; 年中发现进度太慢&#xff0c; 于是降低年初目标&#xff0c; 但年终完成度仍然不及格。 只好跨年时将希望寄托于来年&#xff0c; 明年复明年&#xff0c;明年何其多。 …

Python实现贪吃蛇三

上篇文章Python实现贪吃蛇一&#xff0c;实现了一个贪吃蛇的基础版本。后面第二篇文章Python实现贪吃蛇二修改了一些不足&#xff0c;但最近发现还有两点需要优化&#xff1a; 1、生成食物的时候有概率和记分牌重合 2、游戏缺少暂停功能 先看生成食物的时候有概率和记分牌重合的…

LSTM概述

一、LSTM的背景与动机 1.1 为什么需要LSTM? 在深度学习中,普通的神经网络(如全连接网络或卷积神经网络)在处理序列数据时表现不佳,因为它们无法捕捉数据中的时间依赖关系。循环神经网络(RNN)被设计来处理序列数据,通过隐藏状态在时间步之间传递信息。然而,传统RNN存…

DDS信号发生器设计

一、基本概述 1.1 DDS简介 DDS信号发生器即直接数字频率合成&#xff08;Direct Digital Frequency Synthesis&#xff0c;简称DDS&#xff09;是一种利用数字技术生成信号的方法。它通过数字信号处理技术&#xff0c;将数字信号转换为模拟信号&#xff0c;从而生成高质量的正…

生成式AI:如何用大模型呼叫系统提升销售转化率?

生成式AI技术正以惊人的速度重塑商业版图。从智能助手到自动化营销&#xff0c;从数据分析到客户洞察&#xff0c;生成式AI正在颠覆传统商业模式&#xff0c;云蝠智能以大模型、智能体为核心技术,致力于为百万企业提供语音互动智能体平台与解决方案&#xff0c;为企业在销售转化…

OOP丨《Java编程思想》阅读笔记Chapter 6 : 访问权限控制

《Java编程思想》Chapter 6 : 访问权限控制 1. 前言 1.1. 访问权限控制的等级1.2. package关键字的引入 2. 包&#xff1a;库单元 2.1. 代码组织2.2. 包名的创建 3. Java访问权限修饰词 3.1. 包访问权限3.2. public: 接口访问权限3.3. private: 你无法访问3.4. protected: 继承…

reconic 天空 模型

目录 推理代码&#xff1a; EnvLight 代码&#xff1a; 推理代码&#xff1a; sky_model self.models["Sky"]outputs["rgb_sky"] sky_model(image_info)outputs["rgb_sky_blend"] outputs["rgb_sky"] * (1.0 - outputs["opa…

从服务器多线程批量下载文件到本地

1、客户端安装 aria2 下载地址&#xff1a;aria2 解压文件&#xff0c;然后将文件目录添加到系统环境变量Path中&#xff0c;然后打开cmd&#xff0c;输入&#xff1a;aria2c 文件地址&#xff0c;就可以下载文件了 2、服务端配置nginx文件服务器 server {listen 8080…

C++ | 可变模板参数

1. 为什么需要可变模板参数&#xff1f; 在C11之前&#xff0c;若想实现一个接受任意数量参数的函数&#xff0c;只能依赖va_list等C风格可变参数&#xff0c;但这种方式类型不安全且难以调试。例如printf函数&#xff1a; printf("%d %f %s", 10, 3.14, "hel…

【机器学习】每日一讲-朴素贝叶斯公式

文章目录 **一、朴素贝叶斯公式详解****1. 贝叶斯定理基础****2. 从贝叶斯定理到分类任务****3. 特征独立性假设****4. 条件概率的估计** **二、在AI领域的作用****1. 文本分类与自然语言处理&#xff08;NLP&#xff09;****2. 推荐系统****3. 医疗与生物信息学****4. 实时监控…