.\" Copyright (c) 1990, 1993 .\" The Regents of the University of California. All rights reserved. .\" .\" %%%LICENSE_START(BSD_4_CLAUSE_UCB) .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" 3. All advertising materials mentioning features or use of this software .\" must display the following acknowledgement: .\" This product includes software developed by the University of .\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" %%%LICENSE_END .\" .\" @(#)recno.3 8.5 (Berkeley) 8/18/94 .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .\" .\" Japanese Version Copyright (c) 1999 Shouichi Saito .\" all rights reserved. .\" Translated Mon Jul 26 12:18:39 JST 1999 .\" by Shouichi Saito .\" Proofed Tue Aug 19 1999 by NAKANO Takeo .\" Updated 2012-05-01, Akihiro MOTOKI .\" .TH RECNO 3 2012\-04\-23 "" "Linux Programmer's Manual" .UC 7 .SH 名前 recno \- レコード番号データベースへのアクセスメソッド .SH 書式 .nf \fB#include #include \fP .fi .SH 説明 \fI大事な注意\fP: このページは、バージョン 2.1 までの glibc が提供するインターフェースに ついて説明している。バージョン 2.2 以降の glibc では、もはやこれらの インターフェースは提供されていない。おそらく、このページではなく、 \fIlibdb\fP ライブラリが提供する API をお探しなのだろう。 ルーチン \fBdbopen\fP(3) はデータベースファイルに対するライブラリインターフェースである。 サポートされているファイルフォーマットの一つに、 レコード番号ファイル (record number file: recno file) がある。 データベースへのアクセスメソッドに関する一般的な記述は \fBdbopen\fP(3), に書かれている。 このマニュアルページでは recno 特有の情報についてのみ記述する。 .PP レコード番号データ構造は、フラットなファイル形式に格納された 可変長/固定長レコードからなり、論理レコード番号でアクセスされる。 レコード番号 5 があれば、レコード番号 1 から 4 も存在する。 レコード番号 1 を削除すると、レコード番号 5 は 4 に付け替えられ、 カーソルも移動する。レコード番号 1 以降のものは一つ繰り上がるわけである。 .PP \fBdbopen\fP(3) で使う recno アクセスメソッドに特有のデータ構造体は、 \fI\fP インクルードファイルで次のように定義されている。 .PP .in +4n .nf typedef struct { unsigned long flags; unsigned int cachesize; unsigned int psize; int lorder; size_t reclen; unsigned char bval; char *bfname; } RECNOINFO; .fi .in .PP この構造体の要素を以下に示す。 .TP \fIflags\fP \fIflags\fP の値は以下の値の論理和で指定される。 .RS .TP \fBR_FIXEDLEN\fP レコード長が固定であり、バイト区切りではない。 構造体の要素 \fIreclen\fP はレコードの長さを指定する。また、要素 \fIbval\fP は埋め文字 (pad character) を指定する。 データベースに入れられたレコードの内 \fIreclen\fP バイトに満たないものでは、残りの部分に埋め文字が自動的に入る。 .TP \fBR_NOKEY\fP \fBdbopen\fP(3) で指定されたインターフェイスでは、シーケンシャルなレコード取得は 呼び出しキーとデータ構造体の両方を埋めていく。 \fBR_NOKEY\fP フラグが指定されていると、キー構造体を埋めるのに \fIcursor\fP ルーチンを必要としない。 これを用いれば、アプリケーションがファイルの終りの方を取得する際に、 その途中のレコードを読まなくても済む事になる。 .TP \fBR_SNAPSHOT\fP このフラグを指定すると、 \fBdbopen\fP(3) の呼び出しの際、 オリジナルファイルから変更されていないレコードを読む代わりに、 ファイルの snapshot を用いる。 .RE .TP \fIcachesize\fP 想定されるメモリーキャッシュの最大サイズ (バイト単位)。 この値は \fBあくまで\fP 参考であり、アクセスメソッドはこの値を越えたメモリーの 割り当てに成功することもある。 \fIcachesize\fP が 0 (あるいは指定されていない) の場合、デフォルトのキャッシュが使われる。 .TP \fIpsize\fP recno アクセスメソッドは、自身のレコードのコピーをメモリー内部に btree で保存している。 この値は、その btree 中のノードに対して用いられる ページサイズ (バイト単位) である。 \fIpsize\fP が 0 (あるいは指定されていない) の場合、 ファイルシステムの I/O ブロックサイズを基にして ページサイズが決められる。 詳細は \fBbtree\fP(3) を参照。 .TP \fIlorder\fP データベースに格納されているメタデータの整数値のバイトオーダー。 この数字は、順序を整数で表したものである。 例えばビッグエンディアンなら、この数値は 4,321 となる。 \fIlorder\fP が 0 (指定されていない) の場合、現在のホスト で使われているバイトオーダーが使われる。 .TP \fIreclen\fP 固定レコード長の長さ。 .TP \fIbval\fP 可変レコード長において、 レコードの終りを示す区切りバイト (区切り文字) である。 固定レコード長では埋め文字として使われる。 値が指定されていないと、 可変レコード長のレコードの終りには改行 ("\en") が使われる。 固定レコード長のレコードは空白 (space) で埋められる。 .TP \fIbfname\fP recno アクセスメソッドは、 自身のレコードのコピーをメモリー内部で btree に保存している。 \fIbfname\fP が NULL でない場合、これは btree ファイル名 (btree ファイルを \fBdbopen\fP(3) する時に指定するファイル名) を指定する。 .PP \fIrecno\fP アクセスメソッドで使われるキー/データ対のデータ部分は、 他のアクセスメソッドと同じである。 しかしキーは異なっている。 キーの \fIdata\fP フィールドは \fIrecno_t\fP 型の、メモリー位置へのポインターでなければならない。 \fIrecno_t\fP は \fI\fP インクルードファイルで定義されている。 この型は通常、その実装で利用可能な最大の符号無し整数である。 キーの \fIsize\fP フィールドはその型のサイズとなる。 .PP recno アクセスメソッドのファイルに関連づけられる メタデータは存在できないから、 デフォルト値 (固定レコード長やセパレータ文字など) に対する変更はファイルを開く毎に明示的に指定しなければならない。 .PP \fBdbopen\fP(3) で指定されたインターフェイスでは、 \fIput\fP インターフェイスを使って新しいレコードを作成するときに、 指定したレコード番号がデータベース中に存在している最大レコード番号より 一つ以上大きいと、 空のレコードが同時にできてしまう。 .SH エラー \fIrecno\fP アクセスメソッドルーチンは失敗すると \fBdbopen\fP(3) で指定されているエラーに応じた \fIerrno\fP か、 あるいは以下に示す \fIerrno\fP をセットする。 .TP \fBEINVAL\fP 固定長データベースにレコードを追加するとき、データが長すぎた。 .SH バグ バイトオーダーとしてはビッグエンディアンとリトルエンディアンのみが サポートされている。 .SH 関連項目 \fBbtree\fP(3), \fBdbopen\fP(3), \fBhash\fP(3), \fBmpool\fP(3) \fIDocument Processing in a Relational Database System\fP, Michael Stonebraker, Heidi Stettner, Joseph Kalash, Antonin Guttman, Nadene Lynn, Memorandum No. UCB/ERL M82/32, May 1982. .SH この文書について この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部 である。プロジェクトの説明とバグ報告に関する情報は http://www.kernel.org/doc/man\-pages/ に書かれている。