Provided by: manpages-ja-dev_0.5.0.0.20221215+dfsg-1_all bug

名前

       recno - レコード番号データベースへのアクセスメソッド

書式

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

説明

       大事な注意:  このページは、バージョン 2.1 までの glibc が提供するインターフェースに ついて
       説明している。バージョン 2.2 以降の glibc では、もはやこれらの  インターフェースは提供され
       ていない。おそらく、このページではなく、  libdb  ライブラリが提供する API をお探しなのだろ
       う。

       ルーチン  dbopen(3)   はデータベースファイルに対するライブラリインターフェースである。  サ
       ポートされているファイルフォーマットの一つに、  レコード番号ファイル  (record number file:
       recno file) がある。 データベースへのアクセスメソッドに関する一般的な記述は dbopen(3),  に
       書かれている。 このマニュアルページでは recno 特有の情報についてのみ記述する。

       レコード番号データ構造は、フラットなファイル形式に格納された   可変長/固定長レコードからな
       り、論理レコード番号でアクセスされる。 レコード番号 5 があれば、レコード番号 1 から 4 も存
       在する。  レコード番号 1 を削除すると、レコード番号 5 は 4 に付け替えられ、 カーソルも移動
       する。レコード番号 1 以降のものは一つ繰り上がるわけである。

       dbopen(3)  で使う recno アクセスメソッドに特有のデータ構造体は、 <db.h> インクルードファイ
       ルで次のように定義されている。

           typedef struct {
               unsigned long flags;
               unsigned int  cachesize;
               unsigned int  psize;
               int           lorder;
               size_t        reclen;
               unsigned char bval;
               char         *bfname;
           } RECNOINFO;

       この構造体の要素を以下に示す。

       flags  flags の値は以下の値の論理和で指定される。

              R_FIXEDLEN
                     レコード長が固定であり、バイト区切りではない。  構造体の要素 reclen はレコー
                     ドの長さを指定する。また、要素 bval は埋め文字 (pad character)  を指定する。
                     データベースに入れられたレコードの内 reclen バイトに満たないものでは、残りの
                     部分に埋め文字が自動的に入る。

              R_NOKEY
                     dbopen(3)   で指定されたインターフェイスでは、シーケンシャルなレコード取得は
                     呼び出しキーとデータ構造体の両方を埋めていく。  R_NOKEY フラグが指定されてい
                     ると、キー構造体を埋めるのに  cursor  ルーチンを必要としない。  これを用いれ
                     ば、アプリケーションがファイルの終りの方を取得する際に、  その途中のレコード
                     を読まなくても済む事になる。

              R_SNAPSHOT
                     このフラグを指定すると、 dbopen(3)  の呼び出しの際、  オリジナルファイルから
                     変更されていないレコードを読む代わりに、 ファイルの snapshot を用いる。

       cachesize
              想定されるメモリーキャッシュの最大サイズ  (バイト単位)。 この値は あくまで 参考であ
              り、アクセスメソッドはこの値を越えたメモリーの       割り当てに成功することもある。
              cachesize  が  0  (あるいは指定されていない) の場合、デフォルトのキャッシュが使われ
              る。

       psize  recno アクセスメソッドは、自身のレコードのコピーをメモリー内部に btree で保存してい
              る。 この値は、その btree 中のノードに対して用いられる ページサイズ (バイト単位) で
              ある。 psize が 0 (あるいは指定されていない) の場合、 ファイルシステムの I/O ブロッ
              クサイズを基にして ページサイズが決められる。 詳細は btree(3)  を参照。

       lorder データベースに格納されているメタデータの整数値のバイトオーダー。 この数字は、順序を
              整数で表したものである。  例えばビッグエンディアンなら、この数値は  4,321  となる。
              lorder  が 0 (指定されていない) の場合、現在のホスト で使われているバイトオーダーが
              使われる。

       reclen 固定レコード長の長さ。

       bval   可変レコード長において、 レコードの終りを示す区切りバイト (区切り文字) である。  固
              定レコード長では埋め文字として使われる。  値が指定されていないと、 可変レコード長の
              レコードの終りには改行 ("\n") が使われる。  固定レコード長のレコードは空白  (space)
              で埋められる。

       bfname recno  アクセスメソッドは、 自身のレコードのコピーをメモリー内部で btree に保存して
              いる。  bfname  が  NULL  でない場合、これは  btree  ファイル名  (btree  ファイルを
              dbopen(3)  する時に指定するファイル名) を指定する。

       recno アクセスメソッドで使われるキー/データ対のデータ部分は、 他のアクセスメソッドと同じで
       ある。 しかしキーは異なっている。 キーの data フィールドは recno_t  型の、メモリー位置への
       ポインターでなければならない。 recno_t<db.h> インクルードファイルで定義されている。 こ
       の型は通常、その実装で利用可能な最大の符号無し整数である。 キーの size  フィールドはその型
       のサイズとなる。

       recno アクセスメソッドのファイルに関連づけられる メタデータは存在できないから、 デフォルト
       値 (固定レコード長やセパレータ文字など) に対する変更はファイルを開く毎に明示的に指定しなけ
       ればならない。

       dbopen(3)  で指定されたインターフェイスでは、 put インターフェイスを使って新しいレコードを
       作成するときに、 指定したレコード番号がデータベース中に存在している最大レコード番号より 一
       つ以上大きいと、 空のレコードが同時にできてしまう。

エラー

       recno アクセスメソッドルーチンは失敗すると dbopen(3)  で指定されているエラーに応じた errno
       か、 あるいは以下に示す errno をセットする。

       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.

この文書について

       この man ページは Linux man-pages プロジェクトのリリース 5.10 の一部である。プロジェクトの
       説明とバグ報告に関する情報は https://www.kernel.org/doc/man-pages/ に書かれている。