1 / 21
文档名称:

消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例.docx

格式:docx   大小:31KB   页数:21页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例.docx

上传人:phljianjian 2018/11/13 文件大小:31 KB

下载得到文件列表

消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例.docx

文档介绍

文档介绍:消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例 
消息队列函数由msgget、msgctl、msgsnd、msgrcv四个函数组成。下面的表格列出了这四个函数的函数原型及其具体说明。
1.   msgget函数原型
msgget(得到消息队列标识符或创建一个消息队列对象)
所需头文件
#include <sys/>
#include <sys/>
#include <sys/>
函数说明
得到消息队列标识符或创建一个消息队列对象并返回消息队列标识符
函数原型
int msgget(key_t key, int msgflg)
函数传入值
key
0(IPC_PRIVATE):会建立新的消息队列
大于0的32位整数:视参数msgflg来确定操作。通常要求此值来源于ftok返回的IPC键值
msgflg
0:取消息队列标识符,若不存在则函数会报错
IPC_CREAT:当msgflg&IPC_CREAT为真时,如果内核中不存在键值与key相等的消息队列,则新建一个消息队列;如果存在这样的消息队列,返回此消息队列的标识符
IPC_CREAT|IPC_EXCL:如果内核中不存在键值与key相等的消息队列,则新建一个消息队列;如果存在这样的消息队列则报错
函数返回值
成功:返回消息队列的标识符
出错:-1,错误原因存于error中
附加说明
上述msgflg参数为模式标志参数,使用时需要与IPC对象存取权限(如0600)进行|运算来确定消息队列的存取权限
错误代码
ES:指定的消息队列已存在,但调用进程没有权限访问它
EEXIST:key指定的消息队列已存在,而msgflg中同时指定IPC_CREAT和IPC_EXCL标志
ENOENT:key指定的消息队列不存在同时msgflg中没有指定IPC_CREAT标志
ENOMEM:需要建立消息队列,但内存不足
ENOSPC:需要建立消息队列,但已达到系统的限制
如果用msgget创建了一个新的消息队列对象时,则msqid_ds结构成员变量的值设置如下:
Ÿ        msg_qnum、msg_lspid、msg_lrpid、 msg_stime、msg_rtime设置为0。
Ÿ        msg_ctime设置为当前时间。
Ÿ        msg_qbytes设成系统的限制值。
Ÿ        。
Ÿ        msg_perm结构的uid和cuid成员被设置成当前进程的有效用户ID,gid和cuid成员被设置成当前进程的有效组ID。
2.   msgctl函数原型
msgctl (获取和设置消息队列的属性)
所需头文件
#include <sys/>
#include <sys/>
#include <sys/>
函数说明
获取和设置消息队列的属性
函数原型
int msgctl(int msqid, int cmd, struct msqid_ds *buf)
函数传入值
msqid
消息队列标识符
cmd
 
IPC_STAT:获得msgid的消息队列头数据到buf中
IPC_SET:设置消息队列的属性,要设置的属性需先存储在buf中,可设置的属性包括:、、
buf:消息队列管理结构体,请参见消息队列内核结构说明部分
函数返回值
成功:0
出错:-1,错误原因存于error中
错误代码
ESS:参数cmd为IPC_STAT,确无权限读取该消息队列
EFAULT:参数buf指向无效的内存地址
EIDRM:标识符为msqid的消息队列已被删除
EINVAL:无效的参数cmd或msqid
EPERM:参数cmd为IPC_SET或IPC_RMID,却无足够的权限执行
3.   msgsnd函数原型
msgsnd (将消息写入到消息队列)
所需头文件
#include <sys/>
#include <sys/>
#include <sys/>
函数说明
将msgp消息写入到标识符为msqid的消息队列
函数原型
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg)
函数传入值
msqid
消息队列标识符
msgp
发送给队列的消息。msgp可以是任何类型的结构体,但第一

最近更新