我有一个消息队列,我在循环中收到消息。问题是我不知道如何退出循环。 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);
答案 0 :(得分:1)
由于您的上一个参数不包含IPC_NOWAIT
,msgrcv
会在等待将来的消息时屏蔽。
如果没有要立即阅读的消息,msgrcv(..., ... | IPC_NOWAIT)
将返回(size_t)-1
并设置errno = ENOMSG
。