plucky (3) recno.3.gz

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/ に書かれている。