SystemV消息队列
函数列表
key_t ftok(const char *pathname, int proj_id);
//# include <sys/>
//# include <sys/>
IPC消息队列有一个key的属性(类型为key_t),一般由此函数产生,产生方法为:根据文件名pathname(必须存在且有权限访问)得到索引节点号,然后将索引节点号和子序列号(proj_id)组成ID标示。
int msgget(key_t key, int msgflg);
#include <sys/>
#include <sys/>
#include <sys/>
此函数有两个作用:创建key属性为key的消息队列和返回key指定消息的msgid,其中msgid是消息队列的标示。
其中msgflg标示符可以指定创建消息队列的访问权限(一般为S_IRUSR|S_IWUSR|S_IRGRP|S_IROTH用户读写,组和其它读);同时可以指定msgget函数执行的操作,在创建消息队列时,msgflg必须有IPC_CREAT。
如果msgflg为0,则只返回消息队列的msgid。
此函数成功时,返回非负消息队列标示;失败时返回-1。
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
#include <sys/>
其中msgid是msgget返回的消息队列标识符,msgp是一个结构体指针,msgsz是结构体中具体数据的长度,msgflg可以为0或者IPC_NOWAIT。
当msgflag指定IPC_NOWAIT时,msgsnd函数成为非阻塞,当由于一些限制条件(例如没有存放消息的可用空间时)出现时,该函数立即放回。
发送成功返回0,发送失败返回-1.
ssize_t msgrcv(int msqid, void *msgp, size_t msgsz, long msgtyp, int msgflg);
msgsz是结构体(msgp)中保存数据的最大值,也是函数能够返回的最大数据量。而具体的接收的数据量,由函数返回值确定。msgflag可以为0或者IPC_NOWAIT。msgtyp指定待接收消息的类型。
当msgflag指定为IPC_NOWAIT时,msgrcv函数成为非阻塞,当由于一些限制条件(例如消息队列中没有消息)时,该函数立即返回。
其中type的规则为:
当type=0时,返回消息队列中的第一个消息;
当type>0时,返回类型值为type的消息;
当type<0时,返回类型值小于或者等于type绝对值的消息中类型值最小的消息。
msgrcv函数成功时返回接收消息的数据量,失败返回-1.
int msgctl(int msqid, int cmd, struct msqid_ds *buf);
消息队列控制函数。Msgid为消息队列标示,cmd为具体的命令(一共有三种),buf用来设置或取得消息队列的msgid_ds结构体。
IPC_RMID:删除msgid指定的消息队列。Buf参数忽略,为0
IPC_SET:设置消息队列msgi
3、SystemV消息队列 来自淘豆网m.daumloan.com转载请标明出处.