消息队列 读和写两个进程不需要同时出现 (参考命名管道mkfifo)

Linux有POSIX和System V 两种消息队列

  • POSIX消息队列 打开消息队列mq_open() 成功返回一个消息队列描述符
#include <fcntl.h>
#include <sys/stat.h>
#include <mqueue.h>mqd_t mq_open(const char* name, int oflag, mode_t mode, struct mq_attr* attr);
  • name: 由“/”开头、空字符"\0"结尾、中间最多包含255个不是“/”字符的字符串

  • oflag:访问此消息队列的模式,如O_RDONLY、O_CREAT(此时可加入O_EXCL)、OWRONLY、WRDWR

  • oflag值为O_CREAT需要后2个形参;mode为权限,与open()的mode一样;attr表示消息队列的性质,值为NULL表示新建消息队列为默认设置

  • attr结构体

    struct mq_attr {long mq_flags; //值为O_NONBLOCK 表示马上返回不等待long mq_maxmsg; //包含的最大消息数量long mq_msgsize; //一条消息最大长度,单位字节long mq_curmsgs; //新建队列无意思 表示队列中消息队列数量
    }
    

  • 消息队列 发送mq_send()、接收mq_receive() 信息
#include <mqueue.h>int mq_send(mqd_t mqdes, const char* msg_ptr, size_t msg_len, unsigned msg_prio);
ssize_t mq_receive(mqd_t mqdes, char* msg_ptr, size_t msg_len, unsigned* msg_prio);
  • mqdes: 消息队列描述符

    msg_ptr: 发送/接收 消息的缓冲区指针

    msg_len: 发送消息长度 / 接收信息缓冲区长度

    msg_prio: 消息的优先等级及用来存储消息优先等级的指针


  • mq_notify() 进程在获得新消息时得到通知,无需等待或轮询。消息队列特有
#include <mqueue.h>
//mqdes 消息队列描述符
int mq_notify(mqd_t mqdes, const struct sigevent* sevp);
  • sevp结构
union sigval {          /* Data passed with notification */int     sival_int;         /* Integer value */void   *sival_ptr;         /* Pointer value */
};struct sigevent {int          sigev_notify; /* Notification method */int          sigev_signo;  /* Notification signal */union sigval sigev_value;  /* Data passed withnotification */void       (*sigev_notify_function) (union sigval);/* Function used for threadnotification (SIGEV_THREAD) */void        *sigev_notify_attributes;/* Attributes for notification thread(SIGEV_THREAD) */pid_t        sigev_notify_thread_id;/* ID of thread to signal (SIGEV_THREAD_ID) */
};

linuxC消息队列 mq_open() mq_send() mq_receive() mq_notify()相关推荐

  1. Linux IPC POSIX 消息队列

    模型: #include<mqueue.h> #include <sys/stat.h> #include <fcntl.h> mq_open() //创建/获取消 ...

  2. unix iorp等待队列_FreeRTOS+POSIX之消息队列API详解

    FreeRTOS+POSIX概述 可移植操作系统接口(Portable Operating System Interface,缩写为POSIX)是IEEE为要在各种UNIX操作系统上运行软件,而定义A ...

  3. linux阻塞线程等待唤醒,linux – POSIX消息队列 – mq_send线程唤醒命令

    有人可以向我解释消息队列如何处理唤醒多个 线程在单个消息队列中被阻止? 我的情况是我有多个作者阻止完整的消息 队列,每个发布优先级等于线程的消息 优先.我想确保他们按优先顺序叫醒和发布, 但是我的应用 ...

  4. linux进程间通信:POSIX 消息队列 ----异步通信

    在上一篇中linux进程间通信:POSIX 消息队列我们知道消息队列中在消息个数达到了队列所能承载的上限,就会发生消息的写阻塞. 阻塞式的通信影响系统效率,进程之间在通信收到阻塞时并不能去做其他事情, ...

  5. linux进程间通信:POSIX 消息队列

    文章目录 基本介绍 相关编程接口 编程实例 消息队列通信实例 消息队列属性设置实例 基本介绍 关于消息队列的基本介绍,前面在学习system V的消息队列时已经有过了解,linux进程间通信:syst ...

  6. 进程通信学习笔记(Posix消息队列)

    在某个进程往一个队列写入消息之前,并不需要另外有个进程在该队列上等待消息的到达,这跟管道和FIFO是相反的,对于后两者来说,除非读出者已存在,否则先有写入者是没有意义的 1.mq_open.mq_cl ...

  7. Linux的进程间通信-消息队列

    Linux的进程间通信-消息队列 微博ID:orroz 微信公众号:Linux系统技术 前言 Linux系统给我们提供了一种可以发送格式化数据流的通信手段,这就是消息队列.使用消息队列无疑在某些场景的 ...

  8. Linux进程间通信四 Posix 消息队列简介与示例

    目录 1. Posix 消息队列简介 2. API接口 2.1 创建或打开消息队列 2.2 发送消息 2.3 接收消息 2.4 获取.设置消息队列属性 2.5 关闭消息队列 2.6 删除消息队列 2. ...

  9. POSIX 消息队列基础知识复习,以及相关例程

    1.1        Posix消息队列 1.1.1       消息队列的创建和删除 1.1.1.1     mq_open( ) #include<mqueue.h> mqd_tmq_ ...

最新文章

  1. python怎么安装numpy库-Python NumPy库的安装和使用
  2. opencv 获取灰度图像
  3. android 屏蔽快速点击,Android-如何防止用户过快频繁点击按钮(一)
  4. VC下使用Proc连接Oracle数据库
  5. 关于RecyclerView(一)基本使用
  6. 微软更新补丁目录查询
  7. 解析MOS管推挽电路组成结构和特征优缺点
  8. 学会jQuery 不用买书
  9. 运算放大器:加法电路
  10. linux视频对话框,抖音对话框视频怎么做?如何在视频画面上添加对话气泡框?视频加对话气泡的方法...
  11. Java工作流管理系统(activity6.0)
  12. linux下启动nginx报错libpcre.so.0 = not found
  13. 大数据可视化——dataV,Echarts,蚂蚁金服L7世界地图引入,数字翻牌器,全屏,自定义排名轮播表
  14. 企业应该做的体系认证
  15. 华为鸿蒙新机2k曲面屏,华为5G新旗舰已确认,双曲面屏+升级到鸿蒙2.0,价格很感人...
  16. java小项目 ATM机(简易版)
  17. Python实现 IOT(物联网) 自动化测试
  18. 2019重庆计算机一级报名,2019重庆一级造价报名入口8月9日9点开通,点击进入
  19. 找工作时牢牢记住这些
  20. 《专业四》第一单元练习手册

热门文章

  1. PCB熔锡不良失效分析
  2. PyCharm使用教程 --- 8、版本控制
  3. html显示宇宙星星,如何利用JS/CSS实现根据数值显示星星?
  4. 金庸笔下的“十大名师”
  5. 关于斩波频率一点理解
  6. 英雄联盟服务器乱码怎么修复,英雄联盟异常0.404.80070051解决方法
  7. html 空心字 以及部分艺术字
  8. 计算机一级选择题必背基础知识,计算机一级考试基础知识练习题(三)
  9. R语言特征提取与特征选择
  10. 大白话告诉你Elasticsearch到底是干嘛的?