Chinaunix首页 | 论坛 | 博客
  • 博客访问: 145819
  • 博文数量: 37
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 125
  • 用 户 组: 普通用户
  • 注册时间: 2015-09-28 11:52
个人简介

回首向来萧瑟处,也无风雨也无晴

文章存档

2016年(1)

2015年(36)

我的朋友

分类: LINUX

2015-11-18 15:43:51

今天在学习进程间通信中的消息队列的时候,自己的一个例子经常出现msgrcv error : Identifier removed这个错误,网上找了,发现好多人都与到过这问题,但是并没又给初一个明确的解决办法;后来终于给找出来了,原来是类型的问题:
#include  
#include  
#include  
#include    
#include  
#include
 #define MAX 1024
struct mymsg{
    long int msgtype;
    char buf[MAX];
};



int main()
{
    int msg_type = 1;

    int msgid = -1;
    struct mymsg my_msg;
    long int msgtype = 1;
//    my_msg.msgtype = 1;

    if((msgid = msgget((key_t)1234,0666|IPC_CREAT)) < 0){
        fprintf(stderr,"msgget error:%s\n",strerror(errno));
        return -1;
    }else if(msgid == 0){
        printf("create msg%d success\n",msgid);
    }

    while(1){
        int size =0;
        if((size = msgrcv(msgid,(void *)&my_msg , MAX, 1 ,0)) < 0){  //注意,这里的我类型是直接填1
            fprintf(stderr,"msgrcv error :%s\n",strerror(errno));
            return -1;
        }
        my_msg.buf[size] = '\0';
        printf("receive from msgqueue :%s\n",my_msg.buf);
    }
    
        if(msgctl(msgid,IPC_RMID,0) < 0){
            fprintf(stderr,"msgctnl error :%s\n",strerror(errno));
            return -1;
       }
  
}
这样老是出现msgrcv error : Identifier removed

 把1改成(long int)1,强制转换成长整型1就行了

阅读(3498) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~