免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 6331 | 回复: 5
打印 上一主题 下一主题

msgget 返回值为0 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-09 20:26 |只看该作者 |倒序浏览
本帖最后由 cobber622 于 2010-06-10 08:56 编辑

创建msg队列如下:
  1. #define SHARE_KEY    0x1997

  2. if((msgid=msgget((key_t)SHARE_KEY,IPC_CREAT|IPC_EXCL|00666))==-1) {
  3.                 printf("Creat Message Queue  Error:%s\a\n",strerror(errno));
  4.                 return -1;
  5.         }
  6.        
  7.         printf("msgid=%d\n",msgid);
复制代码
返回值msgid等于0,
所以我用以下代码发送时失败

  1. #define   PERM S_IRUSR|S_IWUSR
  2. if ((msgid = msgget((key_t)SHARE_KEY, PERM)) == -1) { //获取存在的msgid值
  3.                 printf("%s:msg queue is not initialized\n",
  4.                 __FUNCTION__);
  5.         }

  6.         int retVal=msgsnd(msgid,pmsg,sizeof(MSG)-sizeof(long),IPC_NOWAIT);
复制代码
retVal值为-1,请问哪里出问题了,多谢

论坛徽章:
0
2 [报告]
发表于 2010-06-11 23:31 |只看该作者
msgget()的第一个参数 应该是ftok()所返回的吧?

不知道你#define一个出来有什么用

论坛徽章:
0
3 [报告]
发表于 2010-06-12 13:36 |只看该作者
回复 2# JCheung


    谢谢关注!

论坛徽章:
0
4 [报告]
发表于 2012-11-02 22:19 |只看该作者
我也是。只是把第一次的消息队列,然后运行就可以了,不知道为什么。同问大神呢

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
5 [报告]
发表于 2012-11-02 23:54 |只看该作者
第二次不用perm了, 都存在了你还放个perm干什么, 创建时候mode已经定死了, 再开打只是用的有效用户ID去验证一下mode确定你是否有权限.

论坛徽章:
4
水瓶座
日期:2013-09-06 12:27:30摩羯座
日期:2013-09-28 14:07:46处女座
日期:2013-10-24 14:25:01酉鸡
日期:2014-04-07 11:54:15
6 [报告]
发表于 2012-11-02 23:57 |只看该作者
00666 改成0666, 没看到这里.

另外用ftok生成一下Key吧, 不过ipcs看一下没有这个key的话直接指定也没问题, 另外返回-1才是出错, 返回0按道理说是正确的, 但只是很诡异.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP