IPC消息队列。 msgrcv系统调用。系统V.如何走出循环
-
18-09-2019 - |
题
我有从我在一个循环中得到消息的消息队列。问题是,我不知道如何退出循环。 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);
解决方案
由于你的最后参数中不包含IPC_NOWAIT
,同时等待将来的消息msgrcv
块。
如果没有要立即读消息,msgrcv(..., ... | IPC_NOWAIT)
将返回(size_t)-1
并设置errno = ENOMSG
。
不隶属于 StackOverflow