RECNO
Section: C Library Functions (3)
索引
jman
BSD mandoc
索引
名称
recno
- レコード番号データベースへのアクセス手法
索引
書式
In sys/types.h
In db.h
索引
解説
Fn dbopen
ルーチンは、データベースファイルのライブラリインタフェース
ですが、そこでサポートされているファイルフォーマットの 1 つに、
レコード番号ファイルがあります。データベースアクセス手法の一般事項については、
dbopen(3)
を参照してください。このマニュアルページでは、
の固有事項について
説明します。
レコード番号データ構造は、フラットファイルフォーマットで保存された、
可変長あるいは固定長のレコードで、論理レコード番号でアクセスされます。
レコード番号 5 が存在するということは、レコード 1 からレコード 4 が
存在することになります。レコード番号 1 を削除すると、レコード番号 5 は
レコード番号 4 になり、レコード番号 1 の後ろを指していたカーソルは、
1 レコード下にシフトします。
Fn dbopen
で提供される
へのアクセス手法に固有なデータ構造は、
Aq Pa 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
-
Fn dbopen
が指定するインタフェースでは、
シーケンシャルレコード検索で、呼び出し側のキーとデータ構造の両方にデータが
入ります。
R_NOKEY
フラグを指定すると、
cursor
ルーチンがなくてもキー構造に
データが入ります。これにより、アプリケーションは、中間に存在するレコード
すべてを読み込まずに、ファイルの最後のレコードを取り出せます。
- R_SNAPSHOT
-
このフラグは、修正されていないレコードを
オリジナルファイルから読み込む代わりに、
Fn dbopen
が呼び出された場合にファイル
のスナップショットを取ることを要求します。
- cachesize
-
メモリキャッシュの最大サイズ (バイト単位) です。この値は
参考程度のもの
で、アクセス手法はエラーにならずにこれ以上のメモリを割り
振ります。
cachesize
を 0 にすると (サイズを指定しないと)、デフォルトの
キャッシュが使用されます。
- psize
-
へのアクセス手法は、レコードのメモリのコピーを btree に
保存します。
この値は、そのツリーのノードで使用されるページのサイズ (バイト単位) です。
psize
が 0 である場合は (ページサイズが指定されていない場合は)、
基礎となるファイルシステムの I/O ブロックサイズに従って
ページサイズが選択されます。詳細については、
btree(3)
を参照してください。
- lorder
-
保存されているデータベースメタデータの整数のバイトオーダ
です。整数のオーダを数値で表現する必要があります。たとえば
ビッグエンディアンのばバイトオーダは、4321 の順番になります。
lorder
が 0 である場合は、(オーダが指定されていない場合は)、
現行ホストのオーダが使用されます。
- reclen
-
固定長レコードの長さです。
- bval
-
可変長レコードの場合は、レコードの終わりをマークする区切り
バイトで、固定長レコードの場合は、パッドキャラクタです。値を指定しないと、
可変長レコードの最後は改行
(``\n''
)
でマークされ、
固定長レコードはスペースでパッドされます。
- bfname
-
アクセス手法は、レコードのメモリのコピーを btree に保存します。
NULL
以外の
bfname
は、btree ファイルの
Fn dbopen
の
ファイル名として指定されたかのように、btree ファイルの名前を指定します。
へのアクセス手法で使用するキーとデータのペアのデータ部分は、その
他のアクセス手法と同じですが、キーは異なります。キーの
data
フィールドは、
Aq Pa db.h
インクルードファイルで定義された、タイプ
Ft recno_t
のメモリ位置を指す
ポインタでなければなりません。通常の場合、このタイプは、システムで
使用できる最大の符号なし整数タイプです。キーの
size
フィールドは、そのタイプのサイズである必要があります。
基礎となる
アクセス手法ファイルでは、メタデータを
関連付けられないので、デフォルト値に対する変更内容 (たとえばレコードの
固定長やバイト区切り値) は、ファイルを開くたびに明確に指定する
必要があります。
Fn dbopen
が指定するインタフェースでは、
put
インタフェースを使用して
新しいレコードを作成すると、レコード番号が、現在のデータベースの最大
レコードより 1 以上大きい場合、複数の空のレコードが作成されます。
索引
エラー
アクセス手法ルーチンがエラーになると、ライブラリルーチン
dbopen(3)
に指定されたエラーか以下のエラーに
errno
が設定されます。
- Bq Er EINVAL
-
固定長データベースに、大きすぎるレコードを
追加しようとしました。
索引
関連項目
btree(3),
dbopen(3),
hash(3),
mpool(3)
-
"Document Processing in a Relational Database System"
Michael Stonebraker
Heidi Stettner
Joseph Kalash
Antonin Guttman
Nadene Lynn
"Memorandum No. UCB/ERL M82/32"
May 1982
索引
バグ
ビッグエンディアンのバイトオーダとリトルエンディアンのバイトオーダのみ
がサポートされています。
索引
Index
- 名称
-
- 書式
-
- 解説
-
- エラー
-
- 関連項目
-
- バグ
-
Time: 07:07:05 GMT, January 12, 2009