关于Linux系统消息队列中出现的msgsnd与msgrcv使用出现的问题分析:

关于Linux系统消息队列中出现的msgsnd与msgrcv使用出现的问题分析:


1:msgsnd出现identifier removed:
int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
说明msqid出现了问题,查找之上找到问题是:
这里写图片描述
红线处在创建时,括号写错到后面,由于C语言中优先级的问题,从而导致出错
改为:
这里写图片描述
成功;所以说,写代码要小心,这里出错很不容易发现。

2:msgrcv出现identifier removed问题

#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就行了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值