msgrcv error : Identifier removed(ERMID)错误解决;

来源:互联网 发布:影楼后期软件 编辑:程序博客网 时间:2024/05/22 13:52
今天在学习进程间通信中的消息队列的时候,自己的一个例子经常出现msgrcv error : Identifier removed这个错误,网上找了,发现好多人都与到过这问题,但是并没又给初一个明确的解决办法;后来终于给找出来了,原来是类型的问题:
#include <unistd.h>  
#include <stdlib.h>  
#include <stdio.h>  
#include <string.h>   
#include <errno.h>  
#include <sys/msg.h>
 #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就行了

<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(62) | 评论(0) | 转发(0) |
0

上一篇:boa服务移植到安卓手机

下一篇:Linux进程间通信——消息队列:

相关热门文章
  • linux 常见服务端口
  • xmanager 2.0 for linux配置
  • 【ROOTFS搭建】busybox的httpd...
  • openwrt中luci学习笔记
  • 什么是shell
  • linux dhcp peizhi roc
  • 关于Unix文件的软链接
  • 求教这个命令什么意思,我是新...
  • sed -e "/grep/d" 是什么意思...
  • 谁能够帮我解决LINUX 2.6 10...
给主人留下些什么吧!~~
评论热议
0 0
原创粉丝点击