名前
recno - レコード番号データベースへのアクセスメソッド書式
#include <sys/types.h> #include <db.h>
説明
大事な注意: このページは、バージョン 2.1 までの glibc が提供するインターフェースに ついて説明している。バージョン 2.2 以降の glibc では、もはやこれらの インターフェースは提供されていない。おそらく、このページではなく、 libdb ライブラリが提供する API をお探しなのだろう。 ルーチン dbopen(3) はデータベースファイルに対するライブラリインターフェースである。 サポートされているファイルフォーマットの一つに、 レコード番号ファイル (record number file: recno file) がある。 データベースへのアクセスメソッドに関する一般的な記述は dbopen(3), に書かれている。 このマニュアルページでは recno 特有の情報についてのみ記述する。 レコード番号データ構造は、フラットなファイル形式に格納された 可変長/固定長レコードからなり、論理レコード番号でアクセスされる。 レコード番号 5 があれば、レコード番号 1 から 4 も存在する。 レコード番号 1 を削除すると、レコード番号 5 は 4 に付け替えられ、 カーソルも移動する。レコード番号 1 以降のものは一つ繰り上がるわけである。 dbopen(3) で使う recno アクセスメソッドに特有のデータ構造体は、 <db.h> インクルードファイルで次のように定義されている。typedef struct { unsigned long flags; unsigned int cachesize; unsigned int psize; int lorder; size_t reclen; unsigned char bval; char *bfname; } RECNOINFO;
この構造体の要素を以下に示す。
- flags
- flags の値は以下の値の論理和で指定される。
- R_FIXEDLEN
- レコード長が固定であり、バイト区切りではない。 構造体の要素 reclen はレコードの長さを指定する。また、要素 bval は埋め文字 (pad character) を指定する。 データベースに入れられたレコードの内 reclen バイトに満たないものでは、残りの部分に埋め文字が自動的に入る。
- R_NOKEY
- dbopen(3) で指定されたインターフェイスでは、シーケンシャルなレコード取得は 呼び出しキーとデータ構造体の両方を埋めていく。 R_NOKEY フラグが指定されていると、キー構造体を埋めるのに cursor ルーチンを必要としない。 これを用いれば、アプリケーションがファイルの終りの方を取得する際に、 その途中のレコードを読まなくても済む事になる。
- R_SNAPSHOT
- このフラグを指定すると、 dbopen(3) の呼び出しの際、 オリジナルファイルから変更されていないレコードを読む代わりに、 ファイルの 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(3) する時に指定するファイル名) を指定する。
エラー
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.この文書について
この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。2017-09-15 | 4.4 Berkeley Distribution |