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.

A child of 5 could understand this! Fetch me a child of 5.