消息队列函数(msggetmsgctlmsgsndmsgrcv)及其范例.docxVIP

消息队列函数(msggetmsgctlmsgsndmsgrcv)及其范例.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
消息队列函数(msggetmsgctlmsgsndmsgrcv)及其范例

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

文档评论(0)

kabudou + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档