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

linux——消息队列

消息队列,是消息的链表,存放在内核中,一个消息队列由一个标识符(队列ID)来标识。

1.特点

消息队列是面向记录的,其中的消息具有特定的格式以及特定的优先级

消息队列独立于发送和接收进程,进程终止时,消息队列及其内容仍存在

消息队列可以实现消息的随机查询,消息不一定要先进先出的次序读取,也可以按消息的类型读取。

2、相关函数

1.int msgget(key_t key, int msgflg); //创建或打开消息队列, 参数: key:和消息队列关联的key值 msgflg:是一个权限标志,表示消息队列的访问权限,它与文件的访问权限一样。msgflg可以与IPC_CREAT做或操作,表示当key所命名的消息队列不存在时创建一个消息队列,如果key所命名的消息队列存在时,IPC_CREAT标志会被忽略,而只返回一个标识符。 返回值:成功返回队列ID,失败则返回‐1,
#include<stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdlib.h> int main() { int msgid; msgid = msgget(IPC_PRIVATE,0755); if(msgid == -1) { printf("creat message queue failed\n"); return -1; } printf("creat message queue succeed! msgid = %d\n",msgid); system("ipcs -q"); return 0; }

每执行一次,就会多创建一个

4.int msgctl(int msqid, int cmd, struct msqid_ds *buf); //控制消息队列,成功返回0,失败返回‐1 参数: msqid:消息队列的队列ID cmd: IPC_STAT:把msgid_ds结构中的数据设置为消息队列的当前关联值,即用消息队列的当前关联值覆盖msgid_ds的值。 IPC_SET:如果进程有足够的权限,就把消息列队的当前关联值设置为msgid_ds结构中给出的值 IPC_RMID:删除消息队列 buf:是指向 msgid_ds 结构的指针,它指向消息队列模式和访问权限的结构 返回值: 成功:0 失败:‐1
#include<stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdlib.h> int main() { int msgid; msgid = msgget(IPC_PRIVATE,0755); if(msgid == -1) { printf("creat message queue failed\n"); return -1; } printf("creat message queue succeed! msgid = %d\n",msgid); system("ipcs -q"); msgctl(msgid,IPC_RMID,NULL); system("ipcs -q"); return 0; }

这段代码是先创建,然后又删除了

#include<stdio.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/msg.h> #include <stdlib.h> int main() { msgctl(0,IPC_RMID,NULL); system("ipcs -q"); return 0; }

这样就指定删除了id为0的队列

http://www.jsqmd.com/news/573005/

相关文章:

  • DocRes:文档图像恢复全流程应用指南
  • COLMAP去畸变踩坑实录:从分辨率报错到完美修复的完整流程
  • STM32H750VB的FDCAN到底有多快?实测10Mbps与2Mbps速率下的数据传输时间对比
  • Git二分法定位Bug:从原理到实战,高效定位代码问题的核心技巧
  • 别再死记硬背了!用Pikachu靶场图解SQL注入核心原理:闭合、联合查询与信息收集
  • 终极Windows 11系统优化指南:4步使用Win11Debloat提升70%性能
  • 如何打破音乐平台枷锁:5分钟实现加密音频文件自由
  • 【数据结构与算法】二叉树遍历 集合
  • 开源工具TranslucentTB启动错误0x800401E3完整解决方案
  • DFIG_Wind_Turbine:基于MATLAB/Simulink的双馈异步风力发电机仿真模型
  • B树和B+树详解
  • 效率提升利器:用快马AI一键生成高性能LRU缓存数据结构代码
  • 3分钟快速诊断:NatTypeTester让你的网络连接问题迎刃而解
  • Nginx反向代理Portainer避坑指南:解决WebSocket连接中断和文件上传限制问题
  • 新手友好:跟快马AI一步步生成你的第一个简易网盘应用
  • PaddleHub/PaddleOCR + torch/shm.dll 错误解决方案
  • 愚人节前夜大瓜!Claude Code 51 万行源码意外泄露(51万行代码“裸奔“:Claude Code源码泄露事件深度剖析)
  • 如何在Charmbracelet Log中实现结构化日志记录的5个技巧
  • 2.3 从零上手OpenMV:硬件接口详解与STM32通信实战
  • 3层防护构建个人AI助手: Maid跨平台应用的隐私与体验革新
  • 手把手教你用PowerShell脚本,把几百个GitLab仓库一键搬到Gitea(附完整脚本)
  • 从理论到实践:human-pose-estimation.pytorch关键点检测算法原理解析
  • DeEAR语音情感分析教程:使用DeEAR输出构建‘语音情感风格迁移’评估基准
  • Phi-3 Forest Laboratory操作系统知识问答系统:从进程管理到文件系统详解
  • 系统组件维护技术指南:预防机制→诊断体系→分级修复
  • 私有化部署的代码“锁场”:从字节码到硬件指纹的企业级实战
  • 炸了!Claude Code 51.2 万行代码泄露,核心架构完整拆解
  • # 蓝绿部署实战:基于Docker与Nginx的无中断服务更新方案在现代微服务架构
  • 从零到一:基于Rocky Linux 9的K8s高可用集群部署实战(单Master双Node架构)
  • Flink源码阅读:双流操作