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