EN JA
RECNO(3)
RECNO(3) FreeBSD Library Functions Manual 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
格納されたデータベースメタデータの整数のバイトオーダ (順)。数は整数の順序で表現すべきです。たとえばビッグエンディアンの順序は、数 4,321 でしょう。 lorder が 0 である場合は (順序が指定されていない場合)、現在のホストの順序が使用されます。
reclen
固定長レコードの長さ。
bval
可変長レコードのためのレコードの終わりを示す区切りバイト、および固定長レコードのためのパッド (詰め物) 文字。値を指定しないと、改行 (“\n”) が可変長レコードの終りを示すために使われ、そして固定長レコードは空白 (スペース) でパッドされます。
bfname
recno アクセス方法は、btree にそのレコードのメモリ内コピーを格納します。 bfnameNULL でなければ、btree ファイルの dbopen() のためのファイル名として指定されるかのように、 btree ファイルの名前を指定します。

recno アクセス方法で使用されるキー/データのペアのデータ部分は、その他のアクセス手法と同じです。キーは異なります。キーの data フィールドは、 < db.h> インクルードファイルで定義されるように、タイプ recno_t のメモリ位置を指すポインタであるべきです。通常、このタイプは、実装で利用可能な最大の符号なし整数タイプです。キーの size フィールドは、そのタイプのサイズであるべきです。

根本的な recno アクセス方法ファイルに関連したメタデータはありえないので、デフォルト値に行われるどんな変更も (たとえば固定レコード長やバイト分離値)、ファイルをオープンするごとに明確に指定しなければなりません。

dbopen() で指定されたインタフェースでは、新しいレコードを作成するための put インタフェースの使用は、レコード番号が、現在のデータベースの最大のレコードの 2 倍以上である場合、複数の空のレコードが作成されます。

エラー

recno アクセス方法ルーチンが失敗すると、ライブラリルーチン dbopen(3) で明記されたエラーのいずれか、または次のものが errno に設定されます。
[ EINVAL]
固定長データベースに、大きすぎるレコードを追加しようと試みました

関連項目

btree(3), dbopen(3), hash(3), mpool(3) Michael Stonebraker, Heidi Stettner, Joseph Kalash, Antonin Guttman, and Nadene Lynn, Document Processing in a Relational Database System, Memorandum No. UCB/ERL M82/32, May 1982.

バグ

ビッグエンディアンとリトルエンディアンのバイトオーダ (順序) のみサポートされています。
August 18, 1994 FreeBSD