今天在学习进程间通信中的消息队列的时候,自己的一个例子经常出现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就行了
阅读(3608) | 评论(0) | 转发(0) |