SystemV消息队列 为了便于进程之间通信,我们可以使用管道通信 SystemV也提供了一些函数来实现进程的通信.这就是消息队列.
#include <sys/msg.h>
int msgget(key_t key,int msgflg);
int msgsnd(int msgid,struct msgbuf *msgp,int msgsz,int msgflg);
int msgrcv(int msgid,struct msgbuf *msgp,int msgsz,
long msgtype,int msgflg);
int msgctl(Int msgid,int cmd,struct msqid_ds *buf);
struct msgbuf {
long msgtype; /*消息类型 */
....... /*其他数据类型 */
}
msgget函数和semget一样,返回一个消息队列的标志.
msgctl和semctl是对消息进行控制.
msgsnd和msgrcv函数是用来进行消息通讯的.
msgid是接受或者发送的消息队列标志.
msgp是接受或者发送的内容.msgsz是消息的大小.
结构msgbuf包含的内容是至少有一个为msgtype.其他的成分是用户定义的.
对于发送函数msgflg指出缓冲区用完时候的操作.接受函数指出无消息时候的处理.一般为0.接收函数msgtype指出接收消息时候的操作.
如果msgtype=0,接收消息队列的第一个消息.大于0接收队列中消息类型等于这个值的第一个消息.小于0接收消息队列中小于或者等于msgtype绝对值的所有消息中的最小一个消息.