This section is based on catpages contributed by Mainichi Communications, Inc. Translated by: MYCOM team Converted by: Japanese Online Manual Project <man-jp@jp.FreeBSD.ORG> Submitted by: Kazuo Horikawa <k-horik@yk.rim.or.jp>
456 lines
13 KiB
Groff
456 lines
13 KiB
Groff
.\" Copyright (c) 1990, 1993
|
|
.\" The Regents of the University of California. All rights reserved.
|
|
.\"
|
|
.\" 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.
|
|
.\"
|
|
.\" @(#)dbopen.3 8.5 (Berkeley) 1/2/94
|
|
.\"
|
|
.TH DBOPEN 3 "January 2, 1994"
|
|
.UC 7
|
|
.SH 名称
|
|
dbopen \- データベースアクセス方式
|
|
.SH 書式
|
|
.nf
|
|
.ft B
|
|
#include <sys/types.h>
|
|
#include <limits.h>
|
|
#include <db.h>
|
|
|
|
DB *
|
|
dbopen(const char *file, int flags, int mode, DBTYPE type,
|
|
.ti +5
|
|
const void *openinfo);
|
|
.ft R
|
|
.fi
|
|
.SH 解説
|
|
.I dbopen
|
|
は、データベースファイルへのライブラリインタフェースです。
|
|
サポートされているファイルフォーマットは、
|
|
.I btree
|
|
形式、ハッシュ形式、UNIX ファイル指向形式です。
|
|
.I btree
|
|
フォーマットは、ソート済みのバランスのとれた
|
|
ツリー構造の表現です。ハッシュフォーマットは、拡張可能で動的な
|
|
ハッシュスキーマです。フラットファイルフォーマットは、固定長または可変長
|
|
レコードからなるバイトストリームファイルです。フォーマットおよび
|
|
ファイルフォーマットに固有の情報については、それぞれのマニュアルページに
|
|
詳しく述べられています。
|
|
.IR btree (3),
|
|
.IR hash (3),
|
|
.IR recno (3)
|
|
です。
|
|
.PP
|
|
.I dbopen
|
|
は、読み込みまたは書き込み用に
|
|
.I file
|
|
を open します。ディスク上に保持する必要のないファイルは、
|
|
ファイルパラメータをヌルに設定することで作成できます。
|
|
.PP
|
|
引数
|
|
.I flags
|
|
と引数
|
|
.I mode
|
|
は、
|
|
.IR open (2)
|
|
で指定されものと同じです。しかし、
|
|
O_CREAT, O_EXCL, O_EXLOCK, O_NONBLOCK, O_RDONLY, O_RDWR, O_SHLOCK, O_TRUNC
|
|
の各フラグだけに意味があります (データベースファイルは O_WRONLY では
|
|
open できないことに注意してください) 。
|
|
.\"Three additional options may be specified by
|
|
.\".IR or 'ing
|
|
.\"them into the
|
|
.\".I flags
|
|
.\"argument.
|
|
.\".TP
|
|
.\"DB_LOCK
|
|
.\"Do the necessary locking in the database to support concurrent access.
|
|
.\"If concurrent access isn't needed or the database is read-only this
|
|
.\"flag should not be set, as it tends to have an associated performance
|
|
.\"penalty.
|
|
.\".TP
|
|
.\"DB_SHMEM
|
|
.\"Place the underlying memory pool used by the database in shared
|
|
.\"memory.
|
|
.\"Necessary for concurrent access.
|
|
.\".TP
|
|
.\"DB_TXN
|
|
.\"Support transactions in the database.
|
|
.\"The DB_LOCK and DB_SHMEM flags must be set as well.
|
|
.PP
|
|
引数
|
|
.I type
|
|
は、タイプ DBTYPE (インクルードファイル <db.h> で定義されています)
|
|
であり、DB_BTREE, DB_HASH, DB_RECNO を設定できます。
|
|
.PP
|
|
引数
|
|
.I openinfo
|
|
は、アクセス方式のマニュアルページに説明してあるように、
|
|
アクセス方式に固有の構造を指すポインタです。
|
|
.I openinfo
|
|
がヌルの場合、各アクセス方式は、システムとアクセス方式に
|
|
適切なデフォルトを使用します。
|
|
.PP
|
|
.I dbopen
|
|
は、処理が成功すると DB 構造体を指すポインタを返し、
|
|
エラーの場合にはヌルを返します。
|
|
DB 構造体は、インクルードファイル <db.h> 内に定義されており、
|
|
少なくとも次のフィールドが含まれています。
|
|
.sp
|
|
.nf
|
|
typedef struct {
|
|
.RS
|
|
DBTYPE type;
|
|
int (*close)(const DB *db);
|
|
int (*del)(const DB *db, const DBT *key, u_int flags);
|
|
int (*fd)(const DB *db);
|
|
int (*get)(const DB *db, DBT *key, DBT *data, u_int flags);
|
|
int (*put)(const DB *db, DBT *key, const DBT *data,
|
|
.ti +5
|
|
u_int flags);
|
|
int (*sync)(const DB *db, u_int flags);
|
|
int (*seq)(const DB *db, DBT *key, DBT *data, u_int flags);
|
|
.RE
|
|
} DB;
|
|
.fi
|
|
.PP
|
|
これらの要素は、データベースタイプと各種のアクションを実行する
|
|
関数のセットを記述しています。これらの関数は、
|
|
.I dbopen
|
|
によって返された構造体へのポインタを引数に取り、
|
|
時々キー/データ構造とフラグ値を指す 1 つまたは複数のポインタを
|
|
取ることもあります。
|
|
.TP
|
|
type
|
|
基本アクセス方式 (およびファイルフォーマット) のタイプ。
|
|
.TP
|
|
close
|
|
キャッシュされた情報をディスクにフラッシュし、割り振られたリソースを
|
|
解放し、基になっているファイル (1 つまたは複数) を閉じるルーチンを指す
|
|
ポインタ。キー/データの組はメモリにキャッシュされるので、ファイルを
|
|
.I close
|
|
関数または
|
|
.I sync
|
|
関数でファイルを同期するのに失敗すると、情報に矛盾や欠落が
|
|
生じるかもしれません。
|
|
.I close
|
|
ルーチンは、エラー終了時には -1 を返し (errnoを設定) 、
|
|
正常終了時には 0 を返します。
|
|
.TP
|
|
del
|
|
キー/データの組をデータベースから削除するルーチンを指すポインタ。
|
|
.IP
|
|
パラメータ
|
|
.I flag
|
|
は次の値に設定できます。
|
|
.RS
|
|
.TP
|
|
R_CURSOR
|
|
カーソルが参照するレコードを削除します。カーソルは、
|
|
あらかじめ初期化しておく必要があります。
|
|
.RE
|
|
.IP
|
|
delete
|
|
ルーチンはエラー終了時には -1 を返し (errnoを設定) 、
|
|
正常終了時には 0 を返します。指定した
|
|
.I key
|
|
がファイルの中になかった場合は 1 を返します。
|
|
.TP
|
|
fd
|
|
基本データベースのファイル記述表現を返すルーチンを指すポインタ。
|
|
同じファイルを参照しているファイル記述子は、同じ
|
|
.I file
|
|
名で
|
|
.I dbopen
|
|
を呼び出す全プロセスに返されます。このファイル記述子は、ロック関数
|
|
.IR fcntl (2)
|
|
と
|
|
.IR flock (2)
|
|
への引数として安全に使用できます。
|
|
ファイル記述子は、必ずしもアクセス方式が使用している基本ファイルに
|
|
関連付けられている必要はありません。ファイル記述子は
|
|
メモリデータベース内で利用できません。
|
|
.I fd
|
|
ルーチンは、エラー終了時は -1 を返し (errnoを設定) 、
|
|
正常終了時にはファイル記述子を返します。
|
|
.TP
|
|
get
|
|
データベースからキーを使用して取り出すインタフェースである
|
|
ルーチンを指すポインタ。指定の
|
|
.I key
|
|
に関連付けられたデータのアドレスと長さが、
|
|
.I data
|
|
で参照される構造体内に返されます。
|
|
.I get
|
|
ルーチンはエラー終了時には -1 を返し (errnoを設定) 、
|
|
正常終了時には 0 を返します。
|
|
.I key
|
|
がファイルの中になかった場合は 1 を返します。
|
|
.TP
|
|
put
|
|
キー/データの組をデータベース内に保存するルーチンを指すポインタ。
|
|
.IP
|
|
パラメータ
|
|
.I flag
|
|
には次の値の 1 つを設定できます。
|
|
.RS
|
|
.TP
|
|
R_CURSOR
|
|
カーソルが参照するキー/データの組を置き換えます。カーソルは、
|
|
あらかじめ初期化されている必要があります。
|
|
.TP
|
|
R_IAFTER
|
|
.I key
|
|
で参照されるデータの直後にデータを追加し、
|
|
新しいキー/データの組を作成します。追加したキー/データの組のレコード番号が
|
|
.I key
|
|
構造体内に返されます (
|
|
DB_RECNO アクセス方式にだけ適用できます) 。
|
|
.TP
|
|
R_IBEFORE
|
|
.I key
|
|
で参照されるデータの直前にデータを挿入し、
|
|
新しいキー/データの組を作成します。追加したキー/データの組のレコード番号が
|
|
.I key
|
|
構造体内に返されます (DB_RECNO アクセス方式にだけ適用できます) 。
|
|
.TP
|
|
R_NOOVERWRITE
|
|
キーがそれ以前に存在しない場合にだけ、新しいキー/データの組を入力します。
|
|
.TP
|
|
R_SETCURSOR
|
|
キー/データの組を保存し、それを参照するカーソルの位置をセット、または
|
|
初期化します (DB_BTREE および DB_RECNO アクセス方式にだけ適用できます) 。
|
|
.RE
|
|
.IP
|
|
R_SETCURSOR
|
|
が利用できるのは、DB_BTREE と DB_RECNO のアクセス方式でだけです。
|
|
キーには、変化しない固有の順序があることを意味しているからです。
|
|
.IP
|
|
R_IAFTER と R_IBEFORE は DB_RECNO アクセス方式にだけ利用できます。
|
|
どれも、アクセス方式が新しいキーを作成できることを意味しているからです。
|
|
これは、キーが順序付けられており独立な場合にだけ真となります。
|
|
たとえば、レコード番号です。
|
|
.IP
|
|
.I put
|
|
ルーチンのデフォルトの動作は、新しいキー/データの組を入力し、
|
|
それ以前に存在していたキーを置き換えることです。
|
|
.IP
|
|
.I put
|
|
ルーチンはエラー終了時には -1 を返し (errnoを設定) 、
|
|
正常終了時には 0 を返し、
|
|
R_NOOVERWRITE フラグが設定されていて、しかもキーがファイル内に
|
|
既に存在する場合は 1 を返します。
|
|
.TP
|
|
seq
|
|
データベースからのシーケンシャルな取り出し用インタフェースである
|
|
ルーチンを指すポインタ。キーのアドレスと長さは
|
|
.I key
|
|
が参照する構造体内に返され、データのアドレスと長さは
|
|
.I data
|
|
が参照する構造体内に返されます。
|
|
.IP
|
|
シーケンシャルなキー/データの組の取り出しは、いつでも開始することができ、
|
|
``カーソル''の位置は
|
|
.IR del ,
|
|
.IR get ,
|
|
.IR put ,
|
|
.I sync
|
|
の各ルーチンによる呼び出しによって影響を受けません。
|
|
シーケンシャルな走査の間のデータベースの修正は走査に反映されます。
|
|
すなわち、カーソルの前に挿入されたレコードが返されるまでの間、
|
|
カーソルの後ろに挿入されたレコードは返されません。
|
|
.IP
|
|
フラグ値は次の値の 1 つにセットしなければなりません。
|
|
.RS
|
|
.TP
|
|
R_CURSOR
|
|
指定のキーに関連付けられたデータが返されます。これはカーソルをキーの位置に
|
|
セットまたは初期化するという点で
|
|
.I get
|
|
ルーチンと異なります (DB_BTREE
|
|
アクセス方式の場合、返されたキーは必ずしも指定のキーと正確に一致する
|
|
必要がないことに注意してください。返されるキーは、指定のキーより
|
|
大きいかまたは等しいような、最小のキーであり、
|
|
部分的なキー一致と範囲検索ができます) 。
|
|
.TP
|
|
R_FIRST
|
|
データベースの最初のキー/データの組が返され、カーソルはそれを
|
|
参照するようにセットまたは初期化されます。
|
|
.TP
|
|
R_LAST
|
|
データベースの最後のキー/データの組が返され、カーソルはそれを
|
|
参照するようにセットまたは初期化されます (
|
|
DB_BTREE と DB_RECNO の各アクセス方式にだけ適用できます) 。
|
|
.TP
|
|
R_NEXT
|
|
カーソルの直後にあるキー/データの組を取り出します。カーソルがまだ
|
|
セットされていない場合は、これは R_FIRST フラグと同じになります。
|
|
.TP
|
|
R_PREV
|
|
カーソルの直前にあるキー/データの組を取り出します。カーソルがまだ
|
|
設定されていない場合には、これは R_LAST フラグと同じになります。(
|
|
DB_BTREE と DB_RECNO の各アクセス方式にだけ適用できます) 。
|
|
.RE
|
|
.IP
|
|
R_LAST と R_PREV が利用できるのは、DB_BTREE と DB_RECNO の各
|
|
アクセス方式についてだけです。これらはそれぞれキーに変化しない固有の
|
|
順序があることを意味しているからです。
|
|
.IP
|
|
.I seq
|
|
ルーチンはエラー終了時には -1 を返し (errnoを設定) 、
|
|
正常終了時には 0 を返し、指定のキーまたは現在のキーより小さいかまたは
|
|
大きいキー/データの組が存在しない場合は 1 を返します。
|
|
DB_RECNO アクセス方式が使用されていて、
|
|
しかもデータベースファイルがキャラクタ特殊ファイルであり、
|
|
完全なキー/データの組がその時点で存在しない場合、
|
|
.I seq
|
|
ルーチンは 2 を返します。
|
|
.TP
|
|
sync
|
|
キャッシュされた情報をディスクにフラッシュするルーチンを指すポインタ。
|
|
データベースがメモリ内にだけ存在する場合、
|
|
.I sync
|
|
ルーチンには何の効果もなく、処理は常に正常終了します。
|
|
.IP
|
|
フラグ値は次の値にセットできます。
|
|
.RS
|
|
.TP
|
|
R_RECNOSYNC
|
|
DB_RECNO アクセス方式が使用される場合、このフラグは
|
|
.I sync
|
|
ルーチンが、
|
|
.I recno
|
|
ファイル自身ではなく、
|
|
.I recno
|
|
ファイルの基となる
|
|
.I btree
|
|
ファイルに適用されるようにします (詳細については
|
|
.IR recno (3)
|
|
マニュアルページの
|
|
.I bfname
|
|
フィールドを参照してください) 。
|
|
.RE
|
|
.IP
|
|
.I sync
|
|
ルーチンはエラー終了時には -1 を返し (errnoを設定) 、
|
|
正常終了時には 0 を返します。
|
|
.SH キー/データの組
|
|
すべてのファイルタイプへのアクセスはキー/データの組を基にしています。
|
|
キーとデータの両方が次のデータ構造で表されます。
|
|
.PP
|
|
typedef struct {
|
|
.RS
|
|
void *data;
|
|
.br
|
|
size_t size;
|
|
.RE
|
|
} DBT;
|
|
.PP
|
|
DBT 構造体の要素は次のように定義されます。
|
|
.TP
|
|
data
|
|
バイトストリングを指すポインタ。
|
|
.TP
|
|
size
|
|
バイトストリングの長さ。
|
|
.PP
|
|
キーとデータバイトストリングは、同時に利用できるメモリにフィットする必要
|
|
はありますが、参照できる文字列の長さには本質的には制限がありません。
|
|
アクセス方式は、バイトストリングのバイトアラインについては
|
|
何の保証もしていないことに注意すべきです。
|
|
.SH エラー
|
|
.I dbopen
|
|
ルーチンがエラー終了すると、ライブラリルーチン
|
|
.IR open (2)
|
|
や
|
|
.IR malloc (3)
|
|
で書かれているエラー、または下記のエラーに対する
|
|
.I errno
|
|
をセットします。
|
|
.TP
|
|
[EFTYPE]
|
|
ファイルのフォーマットが間違っています。
|
|
.TP
|
|
[EINVAL]
|
|
既存のファイル指定と互換性のないパラメータ (ハッシュ関数、
|
|
パッドバイトなど) や、関数に意味のないパラメータが指定された (たとえば、
|
|
事前の初期化が行なわれていないカーソルの使用) 、
|
|
またはファイルとソフトウェアのバージョン間に不一致があります。
|
|
.PP
|
|
.I close
|
|
ルーチンがエラー終了すると、ライブラリルーチン
|
|
.IR close (2),
|
|
.IR read (2),
|
|
.IR write (2),
|
|
.IR free (3),
|
|
.IR fsync (2)
|
|
に書かれているエラーについての
|
|
.I errno
|
|
をセットします。
|
|
.PP
|
|
.IR del ,
|
|
.IR get ,
|
|
.IR put ,
|
|
.I seq
|
|
の各ルーチンがエラー終了すると、ライブラリルーチン
|
|
.IR read (2),
|
|
.IR write (2),
|
|
.IR free (3),
|
|
.IR malloc (3)
|
|
に書かれているエラーについての
|
|
.I errno
|
|
をセットします。
|
|
.PP
|
|
.I fd
|
|
ルーチンがエラー終了すると、メモリデータベース内の ENOENT に
|
|
.I errno
|
|
をセットします。
|
|
.PP
|
|
.I sync
|
|
ルーチンがエラー終了すると、ライブラリルーチン
|
|
.IR fsync(2)
|
|
に書かれているエラーについての
|
|
.I errno
|
|
をセットします。
|
|
.SH 関連項目
|
|
.IR btree (3),
|
|
.IR hash (3),
|
|
.IR mpool (3),
|
|
.IR recno (3)
|
|
.sp
|
|
.IR "LIBTP: Portable, Modular Transactions for UNIX" ,
|
|
.SH バグ
|
|
typedef DBT は、``data base thang'' の略称で、
|
|
まだ使用されていない合理的な名前を誰も思いつかなかったために
|
|
使われることになりました。
|
|
.PP
|
|
ファイル記述子インタフェースは構成が調和しておらず、
|
|
インタフェースの今後のバージョンでは削除される予定です。
|
|
.PP
|
|
どのアクセス方式も、並行アクセス、ロック、またはトランザクション
|
|
は、どのような形式でも提供しません。
|