共有メモリ・キーは32ビットの整数値です。 outkey をもつ共有メモリ・セグメントが存在しない場合は、大きさ shmsize (KB) の共有メモリ・セグメントが作られます。すでに存在している場合は、 そのサイズが shmsize (KB) よりも小さいとエラーになります。
共有メモリ上の形式は、「書き込み時刻付き・ブロック末尾のブロック長付き」です。 size で指定するブロック長は、共有メモリブロックの先頭と末尾に 書き込まれる「ブロック長」「書き込み時刻」を除いた正味の データ部分のサイズです。「書き込み時刻付き・ブロック末尾のブロック長付き」 の場合、共有メモリブロック先頭に4バイトの「ブロック長」、4バイトの 「書き込み時刻」、末尾に4バイトの「ブロック長」がそれぞれ 書き込まれますから、共有メモリの1ブロックが占めるサイズは size +12バイトになります。 共有メモリ上の形式については order(1W), recvt(1W) を 参照してください。
共有メモリ・セグメントでは、先頭からそのサイズの9/10の位置に しきい線が設定され、それを超えると次の書き込み/読み出し時には 先頭へ戻ります。しきい線の位置から残り1/10の部分に1ブロックが 書き込まれる可能性がありますから、 shmsize (KB) は size +12バイトの10倍以上の大きさが必要です。
shmgen は rate の逆数をプログラム中の1ループ毎の待ち時間値として 使用しているだけですので、実現されるブロック発生レートは 正確に rate ブロック/秒にはならず、速くなるにしたがって 実際には遅めになります。ですからそれを見込んで rate を指定してください。
shmgenは raw2mq(1W) / mq2raw(1W) 等の動作テストのために 作られました。ブロックレートは raw2mq(1W) に HUPシグナルを 送ることによって測定できます。
shmgenが発生するダミーデータブロックには、先頭の タイムスタンプのみが付いていますがそれ以降のデータ部分は 書き込んでおらず、中身が不定です。shmdump(1W) で 表示することはできますが、WINフォーマットにはなっていません。
ログファイル名 logfile を指定すると、ここに動作ログがとられ、指定しないとログ情報は標準出力に 送られます ログファイルは書き込みのたび毎にオープン/クローズされます。
shmgen は、引数なしで起動すると簡単な使用法を表示します。