如果存在这样的消息队列,返回此消息队列的标识符
IPC_CREAT|IPC_EXCL:如果内核中不存在键值与key相等
的消息队列,则新建一个消息队列;如果存在这样的消息
队列则报错
strcpy报错成功:返回消息队列的标识符
函数
返回
值
出错:-1,错误原因存于error中
附加说明上述msgflg参数为模式标志参数,使用时需要与IPC对象存取权限(如0600)进行|运算来确定消息队列的存取权限
错误
代码
EACCES:指定的消息队列已存在,但调用进程没有权限访问它
EEXIST:key指定的消息队列已存在,而msgflg中同时指定
IPC_CREAT和IPC_EXCL标志
ENOENT:key指定的消息队列不存在同时msgflg中没有指定
IPC_CREAT标志
ENOMEM:需要建立消息队列,但内存不足
ENOSPC:需要建立消息队列,但已达到系统的限制
如果用msgget创建了一个新的消息队列对象时,则msqid_ds结构成员变量的值设置如下:
函
数
说
明
将msgp消息写入到标识符为msqid的消息队列
函数原型int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
msqid消息队列标识符
msgp发送给队列的消息。msgp可以是任何类型的结构体,但第一个字段必须为long类型,即表明此发送消息的类型,
msgrcv根据此接收消息。msgp定义的参照格式如下:
struct s_msg{ /*msgp定义的参照格式*/
long type; /* 必须大于0,消息类型 */
char mtext[256]; /*消息正文,可以是其他
任何类型*/
} msgp;
msgsz要发送消息的大小,不含消息类型占用的4个字节,即mtext的长度
函
数
传
入
值
msgflg0:当消息队列满时,msgsnd将会阻塞,直到消息能写进消息队列
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论