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

13 篇文章 0 订阅

转载出处:https://blog.csdn.net/skyroben/article/details/72520501

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

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

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

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

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

  1. struct msg_queue {
  2. structkern_ipc_perm q_perm;
  3. time_tq_stime; /* last msgsndtime */
  4. time_tq_rtime; /* last msgrcvtime */
  5. time_tq_ctime; /* last changetime */
  6. unsignedlong q_cbytes; /* current number of bytes on queue*/
  7. unsignedlong q_qnum; /* number of messages inqueue */
  8. unsignedlong q_qbytes; /* max number of bytes on queue */
  9. pid_tq_lspid; /* pid oflast msgsnd */
  10. pid_tq_lrpid; /* lastreceive pid */
  11. structlist_head q_messages;
  12. structlist_head q_receivers;
  13. structlist_head q_senders;
  14. };

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

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

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

3.1创建打开消息队列






























3.2添加消息



3.3读取消息



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



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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值