0

msgrcv 関数を使用して、メッセージ キューからメッセージを読み取ります。既知の長さのデータを読み取ると、正常に動作します。場合によっては、メッセージの長さが可変です。そのような方法で、必要な量のメモリのみを割り当て、メッセージ キューからデータを失うことなくメッセージ キューからメッセージを読み取ることができます。この問題を克服するためのアイデアを教えてください。

注: IBM メッセージ キューでは、長さを超えたデータを読み取ると、mqget 関数を渡す構造体にメッセージの実際のサイズが入力されます。このように、メッセージキューでこの操作を行う方法はありますか?

4

1 に答える 1

0

マニュアルページを簡単に読んだところmsgrcv()、バッファサイズが小さすぎてMSG_NOERRORフラグを指定しない場合、 msgrcv()-1(errnoが設定されているE2BIG)が返され、メッセージがキューに残されます。

この場合、バッファサイズを2倍にして(最大MSGMAX、Linuxではデフォルトで8192)、再試行できます。

于 2012-05-22T12:51:04.673 に答える