メッセージキューの複数のメッセージの処理

メッセージキューの複数のメッセージの処理

私はこのトピックについていくつかの調査をしましたが、よく理解されていません。

からmsgsnd man page

msgsnd() システムコールは、msgp が指すメッセージのコピーを msqid で指定された識別子のメッセージキューに追加します。

msggetこれは、を使用してメッセージキューを作成すると、およびを使用してキューに追加され、キューから削除が自動的に発生することを意味しますかmsgsndmsgrcv

たとえば、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 コマンドを使用します。

関連情報