免费注册 查看新帖 |

Chinaunix

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

大家帮忙看看错在哪了!!! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-15 19:16 |只看该作者 |倒序浏览
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/msg.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>

#define MFILE "/tmp/msg_log"
#define LOGTYPE 1

struct msg_log{
        int mtype;
        char data[20];
};

int main(void)
{
        key_t key;
        int msgid;
        int ret;
        struct msg_log msg_buf;

        //创建queue     
        key = ftok(MFILE,'l');
        printf("ftok error = %d\n",errno);
        if((msgid = msgget(key,IPC_CREAT|0666)) == -1){
                printf("create error\n");
                exit(EXIT_FAILURE);
        }
        printf("errno = %d\n",errno);

        msg_buf.mtype = LOGTYPE;
        strcpy(msg_buf.data, "xxxx");
        msgsnd(msgid, &msg_buf, sizeof(msg_buf.data), IPC_NOWAIT);

        printf("errno = %d\n",errno);

        memset(&msg_buf,'\0',sizeof(msg_buf));
        printf("msgid = %d\n",msgid);
        if((ret = msgrcv(msgid, &msg_buf, sizeof(msg_buf.data), LOGTYPE, IPC_NOWAIT)) > 0){
              printf("ret = %d, log.data = %s\n",ret,msg_buf.data);
         }
          printf("errno = %d\n",errno);
        exit(EXIT_SUCCESS);
}
程序运行完结果是
ftok error = 0
errno = 0
errno = 0
msgid = 32769
errno = 42

为什么我从消息队列里面读不到数据!!!!!!!!!!
我在ubuntu桌面版可以正常运行,但是在centos,和ubuntu 服务器版都出现上面的错误。

论坛徽章:
0
2 [报告]
发表于 2012-04-06 16:15 |只看该作者
#define ENOMSG      42  /* No message of desired type */, 没有你要的消息。可以用ipcs 命令自己调试下。

论坛徽章:
0
3 [报告]
发表于 2012-06-21 15:02 |只看该作者
原因找到了,该死的int mtype;在64位机子上必需是long,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP