Ipc

處理消息隊列中的多條消息

  • February 22, 2018

我已經對這個主題進行了一些研究,但我不太了解它。

來自msgsnd man page

msgsnd() 系統呼叫將 msgp 指向的消息的副本附加到標識符由 msqid 指定的消息隊列中。

這是否意味著當我使用 amsgget創建消息隊列時,Enqueue 和 Dequeue 會自動使用msgsndand發生msgrcv

例如,如果我想使用一個可以同時保存 N 條消息的消息隊列,當我使用時,msgsnd我將一條消息放入隊列,當我使用時,我msg rcv從這裡獲取並刪除該消息?

如果是這種情況,我不應該手動實現入隊和出隊來創建 N 條消息的列表,因為將一個值設置為const void *msgpfrom int msgsnd(int msqid, const void *msgp, size_t msgsz, int msgflg);就足以在隊列中添加一條消息,並且足以將其接收msgrcv到從中刪除隊列,否則它會一直保留在隊列中,直到被某個程序接收,對嗎?

但是,如果我不是一個可以包含多少消息的設置,那麼這個隊列可以包含多少消息?

根據man2(msgrcv) 入隊/出隊操作由 systemV API 在內部處理。所以你不需要重新實現它們,只需使用提供的 API。

對於消息隊列屬性,使用帶有 IPC_INFO 命令的msgctl 。

引用自:https://unix.stackexchange.com/questions/414790