Ipc
處理消息隊列中的多條消息
我已經對這個主題進行了一些研究,但我不太了解它。
來自
msgsnd man page
:msgsnd() 系統呼叫將 msgp 指向的消息的副本附加到標識符由 msqid 指定的消息隊列中。
這是否意味著當我使用 a
msgget
創建消息隊列時,Enqueue 和 Dequeue 會自動使用msgsnd
and發生msgrcv
?例如,如果我想使用一個可以同時保存 N 條消息的消息隊列,當我使用時,
msgsnd
我將一條消息放入隊列,當我使用時,我msg rcv
從這裡獲取並刪除該消息?如果是這種情況,我不應該手動實現入隊和出隊來創建 N 條消息的列表,因為將一個值設置為
const void *msgp
fromint msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);
就足以在隊列中添加一條消息,並且足以將其接收msgrcv
到從中刪除隊列,否則它會一直保留在隊列中,直到被某個程序接收,對嗎?但是,如果我不是一個可以包含多少消息的設置,那麼這個隊列可以包含多少消息?
根據man2(msgrcv) 入隊/出隊操作由 systemV API 在內部處理。所以你不需要重新實現它們,只需使用提供的 API。
對於消息隊列屬性,使用帶有 IPC_INFO 命令的msgctl 。