0

Message Passing IPCS メソッドを扱っています。これに関していくつか質問があります:

  1. の KEY フィールドは、 これが何を意味するかをipcs -q示しています。0x00000000
  2. msqid を使用して渡されたメッセージを確認できますか?
  3. command の実行後に (特定のユーザーに対して) 2 つのエントリが存在する場合ipcs -q。これは、この特定のユーザーによって 2 つのメッセージが渡されたことを意味しますか?
  4. used-bytes フィールドとメッセージ フィールドが 0 に設定されている場合、これはどういう意味ですか?
  5. メッセージキューがいっぱいかどうかを確認する方法はありますか?
  6. 1 人の特定のユーザーに対していくつのキューを持つことができますか?

私はゴーグリングを試みましたが、これらの質問に対する答えを見つけることができませんでした. 助けてください

4

1 に答える 1

1

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 メッセージ キューの操作例をいくつか確認してください。

于 2013-08-06T08:16:47.980 に答える