进程间通信方式——消息队列

进程间通信方式——消息队列与消息队列的三个数据结构;和消息队列相关的函数;消息队列的工作模式。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

1.消息队列


消息队列是消息的链接表,存放在内核中并由消息队列标识符标识。 标识符是IPC对象的内部名, 而它的外部名则是key(键), 它的基本类型是key_t, 在头文件<sys/types.h>中定义为长整型.。键由内核变换成标识符。
  用户可以从消息队列中读取数据和添加消息,其中发送进程添加消息到队列的末尾,接收进程在队列的头部接收消息,消息一旦被接收,就会从队列中删除。和FIFO有点类似,但是它可以实现消息的随机查询,比FIFO具有更大的优势(比如按消息的类型字段取消息)。

2.消息队列的三个数据结构

linux内核采用的结构msqid_ds管理消息队列

struct msqid_ds
  {
    struct ipc_perm msg_perm;  //消息队列访问权限
    struct msg *msg_first;    //指向第一个消息的指针
    struct msg *msg_last;     //指向最后一个消息的指针
	ulong  msg_cbytes;       //消息队列当前的字节数
	ulong  msg_qnum;        //消息队列当前的消息个数
	ulong  msg_qbytes;     //消息队列可容纳的最大字节数
	pid_t  msg_lsqid;     //最后发送消息的进程号ID
	pid_t  msg_lrqid;     //最后接收消息的进程号ID
	time_t msg_stime;     //最后发送消息的时间
	time_t msg_rtime;     //最后接收消息的时间
	time_t msg_ctime;    //最近修改消息队列的时间
};

linux内核采用的结构msg_queue来描述消息队列

struct msg_queue {
    structkern_ipc_perm q_perm;
    time_tq_stime;         /* last msgsndtime */
    time_tq_rtime;         /* last msgrcvtime */
    time_tq_ctime;         /* last changetime */
    unsignedlong q_cbytes;     /* current number of bytes on queue*/
    unsignedlong q_qnum;       /* number of messages inqueue */
    unsignedlong q_qbytes;     /* max number of bytes on queue */
    pid_tq_lspid;          /* pid oflast msgsnd */
    pid_tq_lrpid;          /* lastreceive pid */
    structlist_head q_messages;
    structlist_head q_receivers;
    structlist_head q_senders;
};                                                                                                                                                         

syetem V IPC 为每一个IPC结构设置了一个ipc_perm结构,该结构规定了许可权和所有者

struct ipc_perm
{
   key_t  key;         //调用shmget()时给出的关键字
   uid_t  uid;        //共享内存所有者的有效用户ID 
   gid_t  gid;        //共享内存所有者所属组的有效组ID 
   uid_t  cuid;       //共享内存创建 者的有效用户ID
   gid_t  cgid;      //共享内存创建者所属组的有效组ID
  unsigned short  mode; //Permissions + SHM_DEST和SHM_LOCKED标志
  unsignedshort   seq;         //序列号
};

3.与消息队列有关的函数

3.1创建打开消息队列

进程间通信方式——消息队列



























3.2添加消息

进程间通信方式——消息队列

3.3读取消息

进程间通信方式——消息队列

3.4获得或修改消息队列或者删除消息队列

进程间通信方式——消息队列


4.消息队列读取数据工作模式

进程间通信方式——消息队列



附:
进程间通信方式








版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/184271.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • msm8937之I2C配置

    msm8937之I2C配置msm8937.dtsi中aliases{i2c1=&i2c_1;i2c2=&i2c_2;i2c3=&i2c_3;i2c4=&i2c_4;i2c5=&i2c_5;i2c6=&i2c_6;i…

    2022年10月18日
  • bookmark什么意思_猎豹浏览器bookmarks乱码

    bookmark什么意思_猎豹浏览器bookmarks乱码这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML图表FLowchart流程图导出与导入导出导入欢迎使用Ma…

  • 大数据时代下的人工智能医疗应用_大数据下的人工智能

    大数据时代下的人工智能医疗应用_大数据下的人工智能大数据时代下的人工智能医疗十问十答-陆讯1、怎么理解大数据时代下的人工智能健康医疗?2、智能医疗相比于传统医疗有什么优势和劣势吗?3、国内外人工智能医疗的知名公司(医院)有哪些?4、人工智能在医疗领域有哪些应用场景?处在阶段?5、人工智能医疗如何保障用户的安全问题?6、人工智能医疗行业的产品经理从业方向都有哪些?7、如何成为一名合格的人工智能医疗产品经理?8、您所负责过的人工智能医疗产品都是怎样的?9、5G会怎样影响智能医疗行业的发展?10、医疗行业智能化的未来会是什么样?Q1.怎

  • jquery unbind_java主函数

    jquery unbind_java主函数PHPuniqid()函数uniqid()函数基于以微秒计的当前时间,生成一个唯一的ID。PHPPHPuniqid()函数uniqid()函数基于以微秒计的当前时间,生成一个唯一的ID。注释:由于基于系统时间,通过该函数生成的ID不是最佳的。如需生成绝对唯一的ID,请使用md5()函数(请在字符串函数参考中查找)。echouniqid();?>本例产生32个字符的独…

    2022年10月23日
  • pycharm向左缩进_vscode整体缩进

    pycharm向左缩进_vscode整体缩进整体右移(缩进):鼠标全选住要缩进的代码,按tab整体左移(反缩进):鼠标全选住要缩进的代码,按tab+shift

  • android线程间通信的几种方法_Android线程间通信机制

    android线程间通信的几种方法_Android线程间通信机制讲解Handler机制的博文很多,我也看了很多,但说实话,在我对Handler几乎不怎么了解的情况下,每一篇文章我都没太看懂,看完之后脑子里还是充满了疑问。究其原因,是因为几乎每一篇文章一上来就开始深入Handler源码,使得在一些宏观的问题上还是充满疑问,如果你从来没接触过Handler,对一些基础的问题还充满疑问,那深入源码去探究根源肯定会有些吃力。下面,我就从一个初学者思考的角度,来讲一讲H…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号