私はこのトピックについていくつかの調査をしましたが、よく理解されていません。
からmsgsnd man page
:
msgsnd() システムコールは、msgp が指すメッセージのコピーを msqid で指定された識別子のメッセージキューに追加します。
msgget
これは、を使用してメッセージキューを作成すると、およびを使用してキューに追加され、キューから削除が自動的に発生することを意味しますか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 コマンドを使用します。