RECNO
Section: Linux Programmer's Manual (3)
Updated: 1994-08-18
Index
JM Home Page
roff page
名前
recno - レコード番号データベースへのアクセスメソッド
書式
#include <sys/types.h>
#include <db.h>
説明
ルーチン
dbopen
はデータベースファイルに対するライブラリインターフェースである。
サポートされているファイルフォーマットの一つに、
レコード番号ファイル (record number file: recno file) がある。
データベースへのアクセスメソッドに関する一般的な記述は
dbopen(3),
に書かれている。
このマニュアルページでは recno 特有の情報についてのみ記述する。
レコード番号データ構造は、フラットなファイル形式に格納された
可変長/固定長レコードからなり、論理レコード番号でアクセスされる。
レコード番号 5 があれば、レコード番号 1 から 4 も存在する。
レコード番号 1 を削除すると、レコード番号 5 は 4 に付け替えられ、
カーソルも移動する。レコード番号 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
-
flag の値は
以下の値のいずれかか、これらの論理和で指定される。
-
- R_FIXEDLEN
-
レコード長が固定であり、バイト区切りではない。
構造体の要素
reclen
はレコードの長さを指定する。また、要素
bval
は埋め文字 (pad character) を指定する。
データベースに入れられたレコードの内
reclen
バイトに満たないものでは、残りの部分に埋め文字が自動的に入る。
- R_NOKEY
-
dbopen
で指定されたインターフェイスでは、シーケンシャルなレコード取得は
呼び出しキーとデータ構造体の両方を埋めていく。
R_NOKEY フラグが指定されていると、キー構造体を埋めるのに
cursor
ルーチンを必要としない。
これを用いれば、アプリケーションがファイルの終りの方を取得する際に、
その途中のレコードを読まなくても済む事になる。
- R_SNAPSHOT
-
このフラグを指定すると、
dbopen
の呼び出しの際、
オリジナルファイルから変更されていないレコードを読む代わりに、
ファイルの snapshot を用いる。
- cachesize
-
想定されるメモリキャッシュの最大サイズ (バイト単位)。
この値は
あくまで
参考であり、アクセスメソッドはこの値を越えたメモリの
割り当てに成功することもある。
cachesize
が 0 (あるいは指定されていない) の場合、デフォルトのキャッシュが使われる。
- psize
-
recno アクセスメソッドは、自身のレコードのコピーをメモリ内部に
btree で保存している。
この値は、その btree 中のノードに対して用いられる
ページサイズ (バイト単位) である。
psize
が 0 (あるいは指定されていない) の場合、
ファイルシステムの I/O ブロックサイズを基にして
ページサイズが決められる。
詳細は
btree(3)
を参照。
- lorder
-
データベースに格納されているメタデータの整数値のバイトオーダー。
この数字は、順序を整数で表したものである。
例えばビッグエンディアンなら、この数値は 4,321 となる。
lorder
が 0 (指定されていない) の場合、現在のホスト
で使われているバイトオーダーが使われる。
- reclen
-
固定レコード長の長さ。
- bval
-
可変レコード長において、
レコードの終りを示す区切りバイト (区切り文字) である。
固定レコード長では埋め文字として使われる。
値が指定されていないと、
可変レコード長のレコードの終りには改行 (``\n'') が使われる。
固定レコード長のレコードは空白 (space) で埋められる。
- bfname
-
recno アクセスメソッドは、
自身のレコードのコピーをメモリ内部で btree に保存している。
bfname が NULL でない場合、これは btree ファイル名
(btree ファイルを dbopen する時に指定するファイル名) を指定する。
recno アクセスメソッドで使われるキー/データ対のデータ部分は、
他のアクセスメソッドと同じである。
しかしキーは異なっている。
キーの
data
フィールドは
recno_t
型の、メモリ位置へのポインタでなければならない。
recno_t
は <db.h>インクルードファイルで定義されている。
この型は通常、その実装で利用可能な最大の符号無し整数である。
キーの
size
フィールドはその型のサイズとなる。
recno アクセスメソッドのファイルに関連づけられる
メタデータは存在できないから、
デフォルト値 (固定レコード長やセパレータ文字など)
に対する変更はファイルを開く毎に明示的に指定しなければならない。
dbopen
で指定されたインターフェイスでは、
put
インターフェイスを使って新しいレコードを作成するときに、
指定したレコード番号がデータベース中に存在している最大レコード番号より
一つ以上大きいと、
空のレコードが同時にできてしまう。
エラー
recno
アクセスメソッドルーチンは失敗すると
dbopen(3)
で指定されているエラーに応じた
errno か、
あるいは以下に示す
errno
をセットする。
- [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
- 名前
-
- 書式
-
- 説明
-
- エラー
-
- バグ
-
- 関連項目
-
This document was created by
man2html,
using the manual pages.
Time: 04:31:58 GMT, November 19, 2007