股票

关于msgsnd()函数在消息队列中发送消息失败的解决方法

调试消息队列时,如果程序编制有错误,在ftok()、msgget()创建队列后,进行消息发送调试msgsnd(),而接收队列函数msgrcv()不能正常执行时,由于需要msgrcv()函数来清空队列中的消息,在这种情况下,msgsnd()函数发送的消息会向队列文件中积累,到一定程度后会发现无论怎么测试都无法再向队列中发送消息。
解决办法:添加msgctl()函数,把队列清空即可。

    ret=msgsnd(msgid,&msgbuf,sizeof(msgbuf.data),IPC_NOWAIT);

    if(ret==-1) {

        printf(“send message errorn”);

        msgctl(msgid,IPC_RMID,&msgbuf);

        return –1;

    }

打赏
原文链接:,转发请注明来源!

发表评论