orderd [-aB] [-l key:size] inkey outkey shmsize limit [ logfile ]
入力側共有メモリにデータを書き込むのは、通常 recvt(1W) プロセスです。 order は、データを整列させる際に、「現在時刻から過去 limit 秒間に入力側共有メモリに書き込まれたデータの中から、まだ 出力側にコピーされていない、最も古い時刻のデータ」を集めて 出力側共有メモリにコピーしていきます。結果的に、同じ(データの) 時刻ラベルをもつデータパケットのうち、最も早く到着したデータよりも limit 秒以上遅れて到着したデータは、出力されずに読み捨てられることに なります。したがって入力側共有メモリは、データが最も膨らんだ ときでも、少なくとも limit 秒分の win 形式データを蓄積できる容量がなければなりません。
一方 limit の秒数は、さまざまな系統から入力側に到着するデータパケットがもちうる、 実時間からの遅延時間の幅を考慮して決定される必要があります。
order の入力側と出力側の間では、最大 limit 秒の遅延時間が発生することになります。また出力されるデータは、 実時間から少なくとも limit 秒遅延しています。
orderd は daemon モードで起動します。order でオプション -D を指定した時と同じ動作です。
ログファイル名 logfile を指定すると、ここに動作ログがとられます。 指定しないとログ情報は標準出力に 送られます(ただし、daemon モードで動いている時は syslogd(8) に送られま す)。ログファイルは書き込みのたび毎に オープン/クローズされます。
order は引数なしで起動すると簡単な使用法を表示します。
(1)4バイトのブロックサイズ(バイト) (2)6バイトの時刻ヘッダー(年〜秒、各1バイト、BCD形式) 年の下2桁(00〜99)、月(01〜12)、日(01〜31)、 時(00〜23)、分(00〜59)、秒(00〜59) (3)同時刻の1チャネル分以上のデータ(win形式)
共有メモリ・セグメント全体は、次のような構造体になっています。
struct Shm { unsigned long p; /* write point */ unsigned long pl; /* write limit */ unsigned long r; /* latest */ unsigned long c; /* counter */ unsigned char d[SIZE]; /* data buffer */ } *sh;p, pl, r, c は管理用の変数、d がデータの領域で、これらはすべて 1つの書き込み側プロセスによって書き込まれます。読み出し側プロセスは これらの変数を使って同期をとって、データを読み出します。
(1)4バイトのブロックサイズ(バイト) (2)6バイトの時刻ヘッダー(年〜秒、各1バイト、BCD形式) 年の下2桁(00〜99)、月(01〜12)、日(01〜31)、 時(00〜23)、分(00〜59)、秒(00〜59) (3)同時刻の1チャネル分以上のデータ(win形式) (4)4バイトのブロックサイズ(バイト)
これはデフォールトの形式と(4)の部分だけが異なります。(1)と(4)には 同じ値が入っており、これは(1)〜(4)をすべて含んだ1ブロックの サイズです。この形式は、後方から(アドレスの高い方から低い方へ) のサーチを可能にするためのものです。この形式では、共有メモリ構造体の 中の変数 pl は、共有メモリ先頭に戻る直前に書き込まれた最後の ブロックの(4)の位置を示します。読み出し側プロセスは、pl を 「ここを越えては新しい秒ブロックに入らず先頭に戻る位置」として 使用することができるとともに、後方サーチの起点(先頭から折り返して戻る点) として利用することができます。読み出し側プログラムでは、共有メモリが この形式であるかどうかを自動判別するのが普通です。