本文是对《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这两个函数的参数很有意思。