スポンサーリンク

RECNO(3) FreeBSD ライブラリ関数マニュアル RECNO(3)

名称

recno − レコード番号データベースへのアクセス手法

書式

#include <sys/types.h>
#include <db.h>

解説

dbopen() ルーチンは、データベースファイルのライブラリインタフェースです が、そこでサポートされているファイルフォーマットの 1 つに、レコード番号 ファイルがあります。データベースアクセス手法の一般事項については、 dbopen(3) を参照してください。このマニュアルページでは、 recno の固有事項 について説明します。

レコード番号データ構造は、フラットファイルフォーマットで保存された、可変 長あるいは固定長のレコードで、論理レコード番号でアクセスされます。レコー ド番号 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 以上大きい場合、複数の空のレコードが作成されます。

エラー

recno アクセス手法ルーチンがエラーになると、ライブラリルーチン dbopen(3) に指定されたエラーか以下のエラーに errno が設定されます。

       [EINVAL]

固定長データベースに、大きすぎるレコードを追加しようと しました。

関連項目

btree(3), dbopen(3), hash(3), mpool(3)

       Michael Stonebraker,                              Heidi Stettner,                                                Joseph Kalash,                                                                 AntoninGuttman, and                    Nadene Lynn,                                   Document Processing in a RelationalDatabase System,                        Memorandum No. UCB/ERL M82/32,                                                         May 1982.

バグ

ビッグエンディアンのバイトオーダとリトルエンディアンのバイトオーダのみが サポートされています。

FreeBSD 10.0 August 18, 1994 FreeBSD 10.0

スポンサーリンク