【问题标题】:IPC message queue. msgrcv system call. System V. how to get out of loopIPC 消息队列。 msgrcv 系统调用。系统五、如何跳出循环
【发布时间】:2010-12-13 13:14:15
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    因为您的最后一个参数不包括IPC_NOWAITmsgrcv 在等待未来消息时会阻塞。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-18
      • 2017-03-16
      • 2012-09-22
      • 2012-04-10
      • 1970-01-01
      • 1970-01-01
      • 2016-08-19
      相关资源
      最近更新 更多