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

名称
書式
解説
エラー
関連項目
バグ

jman



Time: 07:07:05 GMT, January 12, 2009