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

linux进程间通信的posix消息队列应用记录

一、头文件

需要包含系统头文件

mqueue.h

二、数据结构

struct mq_attr {
    long mq_flags;
    long mq_maxmsg;
    long mq_msgsize;
    long mq_curmsgs;
};

该数据结构配置消息队列参数,具体说明如下:

1、mq_flags

接收数据是否阻塞标志,0:阻塞;1:不阻塞;mq_open()这个接口忽略它,对于这个接口,这个参数可以配置,所以忽略该标志;

2、mq_maxmsg

队列中消息的最大数量;

3、mq_msgsize

单条消息的最大允许大小,以字节为单位

4、mq_curmsgs

当前队列中的的消息数量;mq_open()这个接口忽略它;

三、接口

1、打开消息队列

该功能提供两个接口,具体定义如下:

mqd_t mq_open(const char *name, int oflag);
mqd_t mq_open(const char *name, int oflag, mode_t mode, struct mq_attr *attr);

参数定义如下:

name:消息队列的名称,注意,该名称中,只能有一个“/”,并且该队列,在系统中并不能显示;

oflag:可以是O_RDONLY,O_WRONLY,O_RDWR,也可以按位或O_CREATE,O_EXCL,O_NONBLOCK等标志;

mode:如果oflag指定了O_CREATE,需要设置mode,主要是相关的权限;

attr:如果oflag指定了O_CREATE,需要设置以下attr,否则会用系统默认,比如,系统默认mq_maxmsg为3,mq_msgsize为8192;

2、接收数据

该接口具体定义如下:

ssize_t mq_receive(mqd_t mqdes, char *msg_ptr, size_t msg_len, unsigned *msg_prio);

参数定义如下:

mqdes:消息队列描述符;

msg_ptr:接收消息存放的内存,该内存要大于消息队列中,每个消息的最大长度;

msg_len:接受消息的最大长度,该值要大于消息队列中,每个消息的最大长度,否则接收会一直报错;

msg_prio:接收到的消息的优先级,我暂时没有用到,我传输的消息的优先级是一样的;

3、发送数据

该接口具体定义如下:

mqd_t mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned msg_prio);

参数定义如下:

mqdes:消息队列描述符;

msg_ptr:要发送的消息数据内存;

msg_len:要发送的消息数据的长度;

msg_prio:要发送的消息的优先级;

4、其他接口暂时没用,暂不记录;

四、注意事项

1、消息队列创建以后,该消息队列的参数已经固定,如果修改参数,只能重启系统,重新配置,才能生效;

2、在发送和接收数据的接口中,msg_ptr只是一片内存,不特指char字符串,可以是任意数据格式,可以是结构体、整形、浮点数等,使用该接口时,只要强转一下就可以了,但是要注意,数据长度是按字节的长度;

相关文章:

  • Go日期时间处理工具Carbon
  • python 如何获取文件的keys
  • 【C语言】C语言 哈夫曼编码传输(源码+数据文件)【独一无二】
  • 2025年人工智能与教育系统国际学术会议(ICAIES 2025)
  • postgres源码学习之简单sql查询
  • Java开发实习面试笔试题(含答案)
  • 【信息系统项目管理师】专业英语重点词汇大汇总
  • 数字电路中的焊接技术
  • MyBatis XML映射文件中的批量插入和更新
  • 模电知识点总结(2)
  • 信息安全管理体系认证:赋能组织应对数字时代的风险与挑战
  • 【含文档+PPT+源码】基于微信小程序的猎兔汽车保养维修美容服务平台的设计与实现
  • INA219电流、电压、功率测量芯片应用
  • Ollama 本地GUI客户端:为DeepSeek用户量身定制的智能模型管理与交互工具
  • 斐波那契数列模型:在动态规划的丝绸之路上追寻斐波那契的足迹(上)
  • 在VS-qt的程序中,后期增加PCH预编译功能,提高编译速度
  • 【练习】【二分】力扣热题100 34. 在排序数组中查找元素的第一个和最后一个位置
  • 蓝桥杯 Java B 组之设计 LRU 缓存
  • 【DeepSeek系列】04 DeepSeek-R1:带有冷启动的强化学习
  • 吊舱夜视与测距功能:核心技术、应用与未来展望
  • 中欧金融工作组第二次会议在比利时布鲁塞尔举行
  • 持续8年仍难终了的纠纷:败诉方因拒执罪被立案,胜诉方银行账户遭冻结
  • 新华时评:中美经贸会谈为全球经济纾压增信
  • 巴基斯坦外长:近期军事回应是自卫措施
  • 巴基斯坦空袭印度多地空军基地,巴战机进入印领空
  • “毛茸茸”的画,诗意、温暖又治愈