我有一个消息队列,从中可以循环获取消息。问题是我不知道如何退出循环。 msgrcv返回type_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

关于c - IPC消息队列。 msgrcv系统调用。系统V.如何摆脱循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1682676/

10-11 21:24