1 .\" Copyright (c) 1990, 1993
2 .\" The Regents of the University of California. All rights reserved.
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\" notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\" notice, this list of conditions and the following disclaimer in the
11 .\" documentation and/or other materials provided with the distribution.
12 .\" 3. All advertising materials mentioning features or use of this software
13 .\" must display the following acknowledgement:
14 .\" This product includes software developed by the University of
15 .\" California, Berkeley and its contributors.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\" may be used to endorse or promote products derived from this software
18 .\" without specific prior written permission.
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
32 .\" @(#)dbopen.3 8.5 (Berkeley) 1/2/94
34 .\" Japanese Version Copyright (c) 1999 Shouichi Saito
35 .\" all rights reserved.
36 .\" Translated Thu Jul 22 00:00:00 JST 1999
37 .\" by Shouichi Saito <ss236rx@ymg.urban.ne.jp>
38 .\" Proofed Tue Aug 19 1999 by NAKANO Takeo <nakano@apm.seikei.ac.jp>
40 .\"WORD: descriptor デスクリプタ
41 .TH DBOPEN 3 1994-01-02 "" "Linux Programmer's Manual"
44 dbopen \- データベースアクセスメソッド
47 .B #include <sys/types.h>
48 .B #include <limits.h>
51 .BI "DB *dbopen(const char *" file ", int " flags ", int " mode \
53 .BI " const void *" openinfo );
57 はデータベースファイルに対するライブラリインターフェースである。
58 サポートされているファイルフォーマットは btree, hash,
59 UNIX ファイルに指向したフォーマット, の 3 つである。
60 btree フォーマットは、ソートされたバランスツリー構造である。
61 hashed フォーマットは、拡張可能な動的 hash スキームである。
62 フラットファイル (flat-file) フォーマットは、
63 固定長/可変長のレコードからなるバイトストリームファイルである。
64 それぞれのフォーマットと、ファイルフォーマットに特有の情報は
74 を読み込み (読み書き) するためにオープンする。
77 ディスク上に保存したくないファイルを作ることもできる。
98 .\"Three additional options may be specified by ORing
104 .\"Do the necessary locking in the database to support concurrent access.
105 .\"If concurrent access isn't needed or the database is read-only this
106 .\"flag should not be set, as it tends to have an associated performance
110 .\"Place the underlying memory pool used by the database in shared
112 .\"Necessary for concurrent access.
115 .\"Support transactions in the database.
116 .\"The DB_LOCK and DB_SHMEM flags must be set as well.
130 引き数はアクセスメソッドに固有な構造体へのポインタである。
131 それぞれの構造体に関しては各アクセスメソッドの
134 が NULL の場合、それぞれのアクセスメソッドとシステムとに適合した
140 構造体へのポインタを、エラーの場合 NULL を返す。
144 インクルードファイルの中で定義されており、
145 少なくとも以下のようなフィールドを持っている。
151 int (*close)(const DB *db);
152 int (*del)(const DB *db, const DBT *key, unsigned int flags);
153 int (*fd)(const DB *db);
154 int (*get)(const DB *db, DBT *key, DBT *data,
156 int (*put)(const DB *db, DBT *key, const DBT *data,
158 int (*sync)(const DB *db, unsigned int flags);
159 int (*seq)(const DB *db, DBT *key, DBT *data,
166 様々な動作をする関数のセットが記述されている。
169 によって返される構造体へのポインタを引き数にとる。
170 キー/データ構造体へのポインタやフラグ値を取るものもある。
173 用いられているアクセスメソッド (とファイルフォーマット) の型。
176 キャッシュされた情報をディスクに掃きだすためのルーチンへのポインタ。
177 割り当てられたリソースを解放し、利用したファイル(群)をクローズする。
178 キー/データ対がメモリにキャッシュされている場合、
182 関数での同期に失敗すると、情報に矛盾が生じるか情報を失う可能性がある。
189 データベースからキー/データ対を削除するルーチンへのポインタ。
196 カーソル (cursor) が参照しているレコードを削除する。
197 カーソルは前もって初期化されていなくてはならない。
203 をセットする)、成功すると 0 を返す。また指定の
208 用いているデータベースのファイルデスクリプタを返すルーチン
215 そのファイルを示す単一のファイルデスクリプタが返される。
221 このファイルデスクリプタは、必ずしもアクセスメソッドで
222 用いられているファイルのいずれかに関連づけられていなくても良い。
223 メモリ内のデータベースにはファイルデスクリプタは無い。
227 をセットする)、成功するとファイルデスクリプタを返す。
230 データベースからキーを用いてデータを取り出すための
240 をセットする)、成功すると 0 を返す。また
245 キー/データ対をデータベースに納めるルーチンへのポインタ。
248 引き数には次の値のうちのどれか一つがセットできる。
252 カーソルが参照しているキー/データ対を置き換える。
253 カーソルは前もって初期化されている必要がある。
258 新しいキー/データ対を作ってデータを追加する。
268 新しいキー/データ対を作ってデータを挿入する。
276 キーがあらかじめ存在しない場合に限り、新しいキー/データ対をいれる。
279 キー/データ対を納め、それを指すようにカーソル位置をセットあるいは初期
295 を用いるには、変更される事の無い固有の順序をキー
305 新しいキーを作れなければならないからである。
306 これが成立するのは、例えば、順序づけらた独立なレコード番号が
310 ルーチンのデフォルトの動作は、新しいキー/データ対を
311 既に存在するキーを置き換える事て格納する動作である。
316 をセットする)、成功すると 0 を返す。また
320 がセットされていてキーが既に存在する場合 1 を返す。
323 データベースからシーケンシャルにデータを取り出すための
327 が参照する構造体に返される。データのアドレスと長さが
331 シーケンシャルなキー/データ対の取得はいつでも行える。また
338 シーケンシャルなスキャンの途中に行われたデータベースへの変更は
339 スキャンに反映される。すなわち、カーソルの後ろに挿入されたレコードは
340 返されないが、カーソルの前に挿入されたレコードは返される。
342 フラグ値には\fB必ず\fP以下に示すうちの
347 指定したキーに関連づけられたデータが返される。
349 ルーチンとの違いは、カーソルがキーの位置にセットあるいは
354 必ずしも指定したキーに正しくマッチしないかもしれない。
355 返されたキーは、指定されたキーに等しいかより大きいもののうち
357 (部分キーマッチか範囲検索が許可されている場合)。)
360 データベースの最初のキー/データ対が返される。
361 カーソルはそれを参照するようにセットまたは初期化される。
364 データベースの最後のキー/データ対が返される。カーソルはそれを参照する
398 を用いるには、変更される事の無い固有の順序をキーが持っていなければならないからである。
405 指定したキーやカレントキーよりも大きい/小さいキー/データ対がない場合は
409 かつデータベースファイルが文字型のスペシャルファイルで、
410 完成しているキー/データ対が無い場合には、
415 キャッシュされた情報をディスクに掃き出すルーチンへのポインタ。
428 そのベースになっている btree ファイルに sync が行われる。
433 フィールドを説明している部分を参照のこと。)
442 キー/データ対をベースにしてアクセスが行われる。
443 キーとデータのいずれも、次のデータ構造で記述される。
454 構造体の各要素は次のように定義されている。
463 基本的には無制限の長さの文字列を参照できるが、
464 しかしいずれも使用可能なメモリに収まっていなくてはならない。
465 アクセスメソッドはバイト文字列のアラインメントについては
478 ファイルが正しくフォーマットされていない。
481 指定したパラメータ(ハッシュ関数、バイト埋めなど)が現在のファイル仕様に
482 合っていない、パラメータが関数にとって無意味
483 (例えばあらかじめ初期化しないでカーソルを使うとか)、
484 ファイルとソフトウェアのバージョンが合っていない。
512 ルーチンはメモリ内データベースに対し失敗すると
527 は ``data base thang''の略語であるが、これが使われているのは、
528 まだ使われていない妥当な名前が思い付かなかったためである。
530 ファイルデスクリプタを使ったやりとりはひどい代物であり、
533 どのアクセスメソッドも、同時アクセス、ロック、トランザクション
541 .IR "LIBTP: Portable, Modular Transactions for UNIX" ,
542 Margo Seltzer, Michael Olson, USENIX proceedings, Winter 1992.