ヒストグラミングおよびディスプレイは、 好みに応じて適当なものを使用すれば良い訳ですが、 ここでは共有メモリにヒストグラム領域を割り当てる簡便さから、 CERN library の HBOOK と PAW を使った例題を示します (cernlib の Linux 用バイナリの入手方法は、 お近くの識者に尋ねてください)。
先ず、ヒストグラミングを行なうプログラムでは、
通常の HLIMIT
の代わりに HLIMAP
を使います。
PARAMETER (NHOGE=10000) ...... CALL HLIMAP(NHOGE,'sample') CALL HBOOK1(1,'Hogehoge',100,0.,100.,0.) ......ソースをコンパイルし、
(lib)packlib.a
とリンクして実行すると
共有メモリが割り当てられます。
その状況は、
% ipcs -m ------ Shared Memory Segments -------- shmid owner perms bytes nattch status 1408 okamura 666 40000 0という具合に確認する事ができます。 次に、paw を起動して
PAW > hist/hio/global sample PAW > cdir Current Working Directory = //SAMPLE PAW > ldir 1 1D Hogehoge .......等とやれば、 共有メモリ上に定義されたヒストグラムが
//SAMPLE
としてアクセスできる事がわかります。
以降の作業は通常の //PAWC
に定義されたヒストグラムと同様です。
ところで、HBOOK は割り当てた共有メモリを解放する機能を
持っていないようです。
先程の例ですと (shmid
が 1408
でしたので)、
プログラム終了後に
% ipcrm shm 1408を実行して共有メモリを解放してください (少なくとも 95a-97a のソースを眺める限りでは、
HFREEM
が共有メモリ解放を意図したルーチンと思われるのですが、
肝心の部分 shmctl
がコメントアウトされているのです。何故…?
まぁ exposure イベント処理もしてくれないシステムに過度な期待を
抱いても仕方無いって事で)。