Linux IPC- 消息队列

来源:互联网 发布:检查sql注入工具下载 编辑:程序博客网 时间:2024/06/04 17:43
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一样,返回一个消息队列的标志.

msgctlsemctl是对消息进行控制.

msgsndmsgrcv函数是用来进行消息通讯的.

msgid是接受或者发送的消息队列标志.

msgp是接受或者发送的内容.msgsz是消息的大小.

结构msgbuf包含的内容是至少有一个为msgtype.其他的成分是用户定义的.

对于发送函数msgflg指出缓冲区用完时候的操作.接受函数指出无消息时候的处理.一般为0.接收函数msgtype指出接收消息时候的操作.

如果msgtype=0,接收消息队列的第一个消息.大于0接收队列中消息类型等于这个值的第一个消息.小于0接收消息队列中小于或者等于msgtype绝对值的所有消息中的最小一个消息.