处理消息队列中的多条消息

处理消息队列中的多条消息

我已经对这个主题做了一些研究,但我不太理解它。

msgsnd man page

msgsnd()系统调用将msgp指向的消息的副本追加到其标识符由msqid指定的消息队列中。

这是否意味着当我使用 amsgget创建消息队列时,入队和出队会自动与msgsnd和 一起发生msgrcv

例如,如果我想使用一个可以同时保存N条消息的消息队列,当我使用时msgsnd我将一条消息放入队列中,当我使用时msg rcv我从这里获取它并删除该消息?

如果是这种情况,我不应该手动实现入队和出队来创建 N 条消息的列表,因为将一个值设置为const void *msgpfrom 就足以int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);在队列中添加一条消息,并且足以从 接收到该消息msgrcv并将其删除否则它会保留在队列中,直到被某个进程接收为止,我是对的吗?

但是,如果我不是唯一设置可以包含多少消息的人,那么这个队列可以包含多少消息?

答案1

根据man2(msgrcv)入队/出队操作由 systemV API 在内部处理。所以你不需要重新实现它们,只需使用提供的 API 即可。

对于消息队列属性使用消息控制使用 IPC_INFO 命令。

相关内容