IPC消息队列。 msgrcv系统调用。系统V.如何摆脱循环

时间:2009-11-05 18:41:57

标签: c message-queue shared-memory msgrcv msgsend

我有一个消息队列,我在循环中收到消息。问题是我不知道如何退出循环。 msgrcv返回类型size_t所以它继续前进。我应该将返回值与什么值进行比较,以便我可以退出循环?

while(msgrcv(msqid, &msgreceived, sizeof(msgreceived), BUFFER_CHANGED, 0) != -1){
    printf("%d %d %d %d ",msgreceived.value0,msgreceived.value1,msgreceived.value2,msgreceived.value3);

1 个答案:

答案 0 :(得分:1)

由于您的上一个参数不包含IPC_NOWAITmsgrcv会在等待将来的消息时屏蔽。

如果没有要立即阅读的消息,msgrcv(..., ... | IPC_NOWAIT)将返回(size_t)-1并设置errno = ENOMSG