1.共有メモリ セグメントの「キー0x00000000
」フィールドは、通常はです。これはIPC_PRIVATE
、共有メモリ セグメントの作成時に指定されたキーを示します。shmget()のマニュアルには詳細が含まれています。
2.私の知る限り、これはできません。メッセージが msgQ から「キューから取り出された」場合、意図した受信者はそれを認識しません。
3.メッセージ キューのリストにある 2 つのエントリは、システム上に現在 2 つのアクティブなメッセージ キューがあり、対応する一意のキーによって識別されることを示しています。
追加の msgQ の作成:ipcmk -Q
既存の msgQ の削除:ipcrm -Q <unique-key>
4.used-bytes
および0 に設定されたmessages
フィールドは、現在その特定の msgQ を使用して転送が行われていないことを示します。
5.現在、次の C スニペットに示すように、現在 msgQ でキューに入れられているメッセージの数をプログラムで取得するためにこれを行う 1 つの方法。次に、この回答で示されているように、これを msgQ のサイズと比較できます。
int ret = msgctl(msqid, IPC_STAT, &buf);
uint msg = (uint)(buf.msg_qnum);
printf("msgs in Q = %u\n", msg);
6.システム上のすべての msgQ を合わせて使用する合計メモリには制限があります。これは で取得できますulimit -q
。msgQ で使用されるバイト数はused-bytes
、 の出力の列の下に表示されますipcs -Q
。msgQ の総数は、上記の msgQ メモリ プール制限から新しい msgQ を作成するために使用できるメモリの量によってのみ制限されます。
また、この回答の後半で、POSIX メッセージ キューの操作例をいくつか確認してください。