注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

mie

 
 
 

日志

 
 

Linux Ubuntu:mq_open失败,错误码: EINVAL,错误信息:Invalid argument  

2010-07-05 16:15:42|  分类: linux、FreeBSD等 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Linux Ubuntu:mq_open失败,错误码: EINVAL,错误信息:Invalid argument

帮助文档的解释如下: 

EINVAL O_CREAT was specified in oflag,  and  attr  was  not  NULL,  but
              attr->mq_maxmsg  or attr->mq_msqsize was invalid.  Both of these
              fields must be greater than zero.  In a process that is unprivi‐
              leged   (does   not   have   the  CAP_SYS_RESOURCE  capability),
              attr->mq_maxmsg must be less than or equal to the msg_max limit,
              and  attr->mq_msgsize  must  be  less  than or equal to the msg‐
              size_max limit.  In addition,  even  in  a  privileged  process,
              attr->mq_maxmsg cannot exceed the HARD_MAX limit.  (See mq_over‐
              view(7) for details of these limits.)

怎么创建都是错误!看了十多篇文章,都没弄清楚什么原因,最后恍然大悟!我估计消息很可能是文件方式的,于是:
#define FILE_MODE (S_IRUSR | S_IWUSR | S_IROTH | S_IRGRP)
    struct mq_attr attr;
    attr.mq_flags = O_CREAT | O_RDWR;
    attr.mq_maxmsg = 10;
    attr.mq_msgsize = 8192;
 m_event_buffer_recieved=mq_open("/server_data_recived", O_CREAT | O_RDWR, FILE_MODE, &attr);

测试,OK!

注意:

(1)attr.mq_maxmsg 不能超过文件 /proc/sys/fs/mqueue/msg_max 中的数值,我的机器上面是10。

(2)attr.mq_msgsize不能超过 /proc/sys/fs/mqueue/msgsize_max 的数值。

(3)消息队列名称前面必须加上斜杆。

详细请参考:命令“man mq_overview”

 

我试着查找server_data_recived 这个文件,居然找不到!不管了,反正是可以使用了。


By:zhanyonhu

  评论这张
 
阅读(5213)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017