総合手引 | セクション 3 | English | オプション |
#include <sys/types.h>
#include <db.h>
レコード番号データ構造は、フラットファイルフォーマットで保存された、 可変長あるいは固定長のレコードで、論理レコード番号でアクセスされます。 レコード番号 5 が存在するということは、レコード 1 からレコード 4 が 存在することになります。レコード番号 1 を削除すると、レコード番号 5 は レコード番号 4 になり、レコード番号 1 の後ろを指していたカーソルは、 1 レコード下にシフトします。
dbopen() で提供される recno へのアクセス手法に固有なデータ構造は、 < db.h> インクルードファイルで以下のように定義されています。
typedef struct { u_long flags; u_int cachesize; u_int psize; int lorder; size_t reclen; u_char bval; char *bfname; } RECNOINFO;
この構造体のエレメントは、以下のように定義されます。
flags | |
フラグ値は、以下の値の論理和 ( or ) を取ることで指定されます。 | |
R_FIXEDLEN | |
レコードは固定長で、バイトで区切られていません。 構造体のエレメント reclen がレコードの長さを指定し、構造体のエレメント bval がパッドキャラクタとして使用されます。データベースに挿入された レコードは、 reclen バイトより小さい場合、自動的にパッドされます。 | |
R_NOKEY | |
dbopen() が指定するインタフェースでは、 シーケンシャルレコード検索で、呼び出し側のキーとデータ構造の両方にデータが 入ります。 R_NOKEY フラグを指定すると、 cursor ルーチンがなくてもキー構造に データが入ります。これにより、アプリケーションは、中間に存在するレコード すべてを読み込まずに、ファイルの最後のレコードを取り出せます。 | |
R_SNAPSHOT | |
このフラグは、修正されていないレコードを オリジナルファイルから読み込む代わりに、 dbopen() が呼び出された場合にファイル のスナップショットを取ることを要求します。 | |
cachesize | |
メモリキャッシュの最大サイズ (バイト単位) です。この値は 参考程度のもの で、アクセス手法はエラーにならずにこれ以上のメモリを割り 振ります。 cachesize を 0 にすると (サイズを指定しないと)、デフォルトの キャッシュが使用されます。 | |
psize | |
recno へのアクセス手法は、レコードのメモリのコピーを btree に 保存します。 この値は、そのツリーのノードで使用されるページのサイズ (バイト単位) です。 psize が 0 である場合は (ページサイズが指定されていない場合は)、 基礎となるファイルシステムの I/O ブロックサイズに従って ページサイズが選択されます。詳細については、 btree(3) を参照してください。 | |
lorder | |
保存されているデータベースメタデータの整数のバイトオーダ です。整数のオーダを数値で表現する必要があります。たとえば ビッグエンディアンのばバイトオーダは、4321 の順番になります。 lorder が 0 である場合は、(オーダが指定されていない場合は)、 現行ホストのオーダが使用されます。 | |
reclen | |
固定長レコードの長さです。 | |
bval | |
可変長レコードの場合は、レコードの終わりをマークする区切り バイトで、固定長レコードの場合は、パッドキャラクタです。値を指定しないと、 可変長レコードの最後は改行 ("\n") でマークされ、 固定長レコードはスペースでパッドされます。 | |
bfname | |
recno アクセス手法は、レコードのメモリのコピーを btree に保存します。 NULL 以外の bfname は、btree ファイルの dbopen() の ファイル名として指定されたかのように、btree ファイルの名前を指定します。 | |
recno へのアクセス手法で使用するキーとデータのペアのデータ部分は、その 他のアクセス手法と同じですが、キーは異なります。キーの data フィールドは、 < db.h> インクルードファイルで定義された、タイプ recno_t のメモリ位置を指す ポインタでなければなりません。通常の場合、このタイプは、システムで 使用できる最大の符号なし整数タイプです。キーの size フィールドは、そのタイプのサイズである必要があります。
基礎となる recno アクセス手法ファイルでは、メタデータを 関連付けられないので、デフォルト値に対する変更内容 (たとえばレコードの 固定長やバイト区切り値) は、ファイルを開くたびに明確に指定する 必要があります。
dbopen() が指定するインタフェースでは、 put インタフェースを使用して 新しいレコードを作成すると、レコード番号が、現在のデータベースの最大 レコードより 1 以上大きい場合、複数の空のレコードが作成されます。
[EINVAL] | |
固定長データベースに、大きすぎるレコードを 追加しようとしました。 | |
Memorandum No. UCB/ERL M82/32, Document Processing in a Relational Database System, May 1982.
, , , , ,RECNO (3) | August 18, 1994 |
総合手引 | セクション 3 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | Unix is a junk OS designed by a committee of PhDs. | ” |
— Dave Cutler |