Provided by: manpages-ja-dev_0.5.0.0.20210215+dfsg-1_all
名前
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 アクセスメソッドで使われるキー/データ対のデータ部分は、 他のアクセスメソッドと同じで ある。 しかしキーは異なっている。 キーの data フィールドは recno_t 型の、メモリー位置への ポインターでなければならない。 recno_t は <db.h> インクルードファイルで定義されている。 こ の型は通常、その実装で利用可能な最大の符号無し整数である。 キーの size フィールドはその型 のサイズとなる。 recno アクセスメソッドのファイルに関連づけられる メタデータは存在できないから、 デフォルト 値 (固定レコード長やセパレータ文字など) に対する変更はファイルを開く毎に明示的に指定しなけ ればならない。 dbopen(3) で指定されたインターフェイスでは、 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.
この文書について
この man ページは Linux man-pages プロジェクトのリリース 3.79 の一部 である。プロジェクト の説明とバグ報告に関する情報は http://www.kernel.org/doc/man-pages/ に書かれている。