c - IPC消息队列。 msgrcv 系统调用。系统五、如何跳出循环

标签 c message-queue shared-memory msgrcv msgsend

我有一个消息队列,我可以从中循环获取消息。问题是我不知道如何退出循环。 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 在等待 future 消息时会阻塞。

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

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

相关文章:

python - 在grinder中跨代理、跨进程共享资源

perl - 在 mod_perl 环境中使用共享内存

Java消息队列抽象

python - Fortran 或 C 和 f2py 求解微分方程

c# - 当从 C# 调用/编码(marshal)此结构到 C-DLL 时,为什么此字符串为空?

c - C 中的指针转换和指针大小

c++ - 再次出现错误 C2248

google-app-engine - 我可以阻止 Google AppEngine 拉取任务队列直到任务可用吗?

sqlite - 数据共享 - SQLite 与共享内存 IPC

c - getfloat 返回 23.7999