2009-11-05 58 views
0

我有一个消息队列,我从中获取消息循环。问题是我不知道如何退出循环。 msgrcv返回类型size_t,所以它继续前进。我应该比较什么值的返回值,所以我可以退出循环?IPC消息队列。 msgrcv系统调用。系统V.如何走出循环

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

回答

1

因为你的最后一个参数不包括IPC_NOWAITmsgrcv盖帽,等待未来的消息。

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