tail head cat sleep
QR code linking to this page

manページ  — RECNO

名称

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, Antonin Guttman, Nadene Lynn, Memorandum No. UCB/ERL M82/32, Document Processing in a Relational Database System, May 1982.

バグ

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

RECNO (3) August 18, 1994

tail head cat sleep
QR code linking to this page


このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.

Unix is a junk OS designed by a committee of PhDs.
— Dave Cutler