msgrcv error : Identifier removed(ERMID)錯誤解決;

今天在學習進程間通信中的消息隊列的時候,自己的一個例子經常出現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就行了



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章