興味深い質問; あなたは通常それをデザインとして見ません。私は、わずかに類似した手法を使用して履歴を記録するプログラムを持っていますが、バイナリ形式を使用しています。「ログファイル」には4つの部分があり、すべてマシンに依存しない形式でレイアウトされています。
- マジックナンバーと、使用済みリストおよび空きリストのエントリの(最大)数、次の履歴エントリのシーケンス番号、使用済みリストの実際のエントリ数、空きリストの実際のエントリ数を含むヘッダー、およびファイルの長さ(それぞれ4バイト)。
- 使用されるリスト。各エントリはオフセットと長さ(各エントリの各部分に4バイト)を提供します。
- フリーリスト。各エントリは使用済みリストエントリに類似しています。
- メインデータ。ヌルターミネータバイトで終了する連続したバイトセットで構成される各履歴レコード。
新しいレコードが割り当てられると、空きリストにスペースがある場合、そこにエントリが上書きされます(必ずしもすべてを使用するわけではありません。その場合、フラグメントは空きリストに残ります)。空きリストにスペースがない場合、最後に新しいスペースが割り当てられます。古いレコードが回転すると、そのスペースは空きリストに移動し、隣接する空きレコードと合体します。レコードを多数の行に分散できるように、SQLステートメントを処理するように設計されています。このコードは、指定された数のレコードで機能します。ファイル自体のサイズは制限されません(そうすることは難しくありませんが)。
メインコードの履歴コードは、2つのファイルhistory.cとhistory.hにあり、プログラムSQLCMDのソースから入手できます(Microsoftのバージョンではなく、Microsoftの10年以上前に存在していたバージョンです)。国際Informixのユーザーグループのソフトウェアアーカイブ。また、履歴ファイルダンププログラム(histdump.c)と履歴テスター(histtest.ec-ESQL / Cであると主張しますが、それ自体が実際にはCコードです;呼び出すサポート関数の1つはInformix ESQL / Cを使用しますライブラリ関数)。Informix ESQL / Cを使用せずに実験したい場合は、私に連絡してください-私のプロファイルを参照してください。設計環境の外でhisttestをコンパイルするために、いくつかの些細な変更が必要です。さらに、メイクファイルが必要です。