System V消息队列

本文是对《Unix 网络编程 卷2:进程通信》第六章的笔记。

引言

System V 消息队列首部的结构,结构代码如下:

struct msqid_ds {
  struct       ipc_perm msg_perm;    /* 定义一些用户操作权限的问题*/
  msgqnum_t    msg_qnum;             /* 当前消息队列中的消息数量*/
  msglen_t     msg_qbytes;           /* 消息队列所允许的最大字节数 */
  pid_t        msg_lspid;            /* 最后一个消息的发送者的进程ID*/
  pid_t        msg_lrpid;            /* 最后一个消息取走者的进程ID*/
  time_t       msg_stime;            /* last-msgsnd() time */
  time_t       msg_rtime;            /* last-msgrcv() time */
  time_t      msg_ctime;             /* last-change time */
};

与posix消息队列的区别

其实,与posix消息队列的头部结构拿来比较一下,区别还是一目了然的。由于没有一些锁的支撑,最大的疑惑点就是System V消息队列的互斥性访问有谁来保证,读和写的相互唤醒又有谁来做的呢?

消息传送机制

定义自己的消息结构

struct mymesg{
  long type;
  long len;
  char msg[MAXLEN];      
}

 重点是:msgsnd和msgrecv这两个函数的参数很有意思。

原文地址:https://www.cnblogs.com/sylz/p/6028228.html