我已经对这个主题做了一些研究,但我不太理解它。
从msgsnd man page
:
msgsnd()系统调用将msgp指向的消息的副本追加到其标识符由msqid指定的消息队列中。
这是否意味着当我使用 amsgget
创建消息队列时,入队和出队会自动与msgsnd
和 一起发生msgrcv
?
例如,如果我想使用一个可以同时保存N条消息的消息队列,当我使用时msgsnd
我将一条消息放入队列中,当我使用时msg rcv
我从这里获取它并删除该消息?
如果是这种情况,我不应该手动实现入队和出队来创建 N 条消息的列表,因为将一个值设置为const void *msgp
from 就足以int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
在队列中添加一条消息,并且足以从 接收到该消息msgrcv
并将其删除否则它会保留在队列中,直到被某个进程接收为止,我是对的吗?
但是,如果我不是唯一设置可以包含多少消息的人,那么这个队列可以包含多少消息?
答案1
根据man2(msgrcv)入队/出队操作由 systemV API 在内部处理。所以你不需要重新实现它们,只需使用提供的 API 即可。
对于消息队列属性使用消息控制使用 IPC_INFO 命令。