Provided by: manpages-ja-dev_0.5.0.0.20140515+dfsg-2_all bug

名前

       GDBM - GNUデータベース・マネージャ。dbm および ndbm 互換機能を含む。 (Version 1.8.3.)

書式

       #include <gdbm.h>

       extern gdbm_error
       gdbm_errno

       extern char
       *gdbm_version

       GDBM_FILE
       gdbm_open (name, block_size, read_write, mode, fatal_func)
       char * name;
       int block_size, read_write, mode;
       void (*fatal_func) ();

       void
       gdbm_close (dbf)
       GDBM_FILE dbf;

       int
       gdbm_store (dbf, key, content, flag)
       GDBM_FILE dbf;
       datum key, content;
       int flag;

       datum
       gdbm_fetch (dbf, key)
       GDBM_FILE dbf;
       datum key;

       int
       gdbm_delete (dbf, key)
       GDBM_FILE dbf;
       datum key;

       datum
       gdbm_firstkey (dbf)
       GDBM_FILE dbf;

       datum
       gdbm_nextkey (dbf, key)
       GDBM_FILE dbf;
       datum key;

       int
       gdbm_reorganize (dbf)
       GDBM_FILE dbf;

       void
       gdbm_sync (dbf)
       GDBM_FILE dbf;

       int
       gdbm_exists (dbf, key)
       GDBM_FILE dbf;
       datum key;

       char *
       gdbm_strerror (errno)
       gdbm_error errno;

       int
       gdbm_setopt (dbf, option, value, size)
       GDBM_FILE dbf;
       int option;
       int *value;
       int size;

       int
       gdbm_fdesc (dbf)
       GDBM_FILE dbf;

       DBM Compatability routines:

       #include <dbm.h>

       int
       dbminit (name)
       char *name;

       int
       store (key, content)
       datum key, content;

       datum
       fetch (key)
       datum key;

       int
       delete (key)
       datum key;

       datum
       firstkey ()

       datum
       nextkey (key)
       datum key;

       int
       dbmclose ()

       NDBM Compatability routines:

       #include <ndbm.h>

       DBM
       *dbm_open (name, flags, mode)
       char *name;
       int flags, mode;

       void
       dbm_close (file)
       DBM *file;

       datum
       dbm_fetch (file, key)
       DBM *file;
       datum key;

       int
       dbm_store (file, key, content, flags)
       DBM *file;
       datum key, content;
       int flags;

       int
       dbm_delete (file, key)
       DBM *file;
       datum key;

       datum
       dbm_firstkey (file)
       DBM *file;

       datum
       dbm_nextkey (file)
       DBM *file;

       int
       dbm_error (file)
       DBM *file;

       int
       dbm_clearerr (file)
       DBM *file;

       int
       dbm_pagfno (file)
       DBM *file;

       int
       dbm_dirfno (file)
       DBM *file;

       int
       dbm_rdonly (file)
       DBM *file;

説明

       GNU  dbm は、キーとデータのペアを含んだデータファイルを取り扱う ルーチン群のライブラリであ
       る。   提供されるアクセスとしては、キーによる格納、キーによる取り出し、   キーによる削除の
       他、すべてのキーに渡るソートされていない横断的な アクセスがある。 一つのプロセスからは複数
       のデータファイルを同時に利用することができる。

       gdbm ファイルをオープンするプロセスは、「リーダ」または「ライタ」 と呼ばれる。 1 つの gdbm
       ファイルをオープンできるライタは  1 つだけだが、 リーダは複数が 1 つの gdbm ファイルをオー
       プンすることができる。    リーダとライタは同時に同じファイルをオープンすることはできない。
       gdbm ファイルをオープンする手続きは次の通りである。

         GDBM_FILE dbf;

         dbf = gdbm_open ( name, block_size, read_write, mode, fatal_func )

       name はファイルの名前である。(完全な名前、gdbm はこの名前に 文字列を付け加えるようなことは
       しない)  block_size はディスクからメモリへ 1  回に転送されるサイズである。  このパラメータ
       は、新しいファイルの場合以外は無視される。最小サイズ  は 512 である。 512 よりも小さい場合
       には, gdbm はファイルシステムに対する stat のブロックサイズを使用する。 read_write  には以
       下のいずれかの値を取る。
       GDBM_READER リーダ
       GDBM_WRITER ライタ
       GDBM_WRCREAT ライタ - データベースが存在しなければ作成する
       GDBM_NEWDB ライタ - すでに存在しても新しいデータベースを作成する
       最後の  3 つについては (データベースのライタ) read_write に対して 以下をビットの OR により
       追加できる: GDBM_SYNC  はすべてのデータベースの操作をディスクと同期する、また  GDBM_NOLOCK
       はデータベースファイルに関するライブラリからのロック動作を行わない。  オプション GDBM_FAST
       は gdbm の既定動作が no-sync モードになったためにもう使われなくなった。
       mode はファイルのモードである (chmod(2) および open(2) を 参照)。(*fatal_func) ()  は  dbm
       が致命的エラーを検出した場合に呼び出す  関数である。この関数への唯一のパラメータは文字列で
       ある。 値 0 が指定されると、gdbm はデフォルトの関数を使用する。

       返り値 dbf は、その gdbm  ファイルにアクセスする他のすべてのルーチン  に必要なポインタであ
       る。  NULL  ポインタが返った場合、gdbm_open  は 成功しなかったことを示す。 gdbm のエラーは
       gdbm_errno に、システムのエラーは errno に格納される  (エラーコードについては  gdbmerrno.h
       を参照)。

       以下のすべてのコールにおいては、  パラメータ  dbfgdbm_open から 返ってきたポインタであ
       る。

       どんなファイルでもオープンしたものをクローズすることは重要である。  クローズはファイルに対
       するリーダ数/ライタ数を更新する。 これは以下のようにして行う。

         gdbm_close (dbf);

       データベースは 3 つの主なルーチンによって利用できる。最初はデータを データベースに格納する
       ものである。

         ret = gdbm_store ( dbf, key, content, flag )

       dbfgdbm_open から返ってきたポインタである。 key はキーデータで、contentkey  に関連
       付けられた データである。 flag は以下のいずれかの値を持つことができる。
       GDBM_INSERT 挿入のみ。キーが存在すればエラーとなる。
       GDBM_REPLACE キーが存在すれば内容を更新する。

       リーダが  gdbm_store  をコールした場合、返り値は  -1 となる。 GDBM_INSERT が指定された時に
       データベースに key が存在すると、 返り値は 1 である。そうでなければ返り値は 0 である。

       注意: 既にデータベースに存在するキーを指定して格納する場合、 GDBM_REPLACE で呼び出している
       ならば、gdbm は古いデータを 新しいデータで置き換える。 同じキーで 2 つのデータ・アイテムを
       得ることはできないし、 また gdbm_store がエラーを返すこともない。

       注意: gdbm のサイズは、dbm  ndbm と異なり制限されない。 データは必要なだけ大きくすること
       ができる。

       データを検索するには、以下のようにする:

         content = gdbm_fetch ( dbf, key )

       dbfgdbm_open から返ってきたポインタである。 key はキーデータである。

       返り値の  dptr が NULL の場合、データは見つからなかった。 見つかった場合はデータへのポイン
       タが返る。 dptr の記憶空間は malloc(3C) により確保される。 gdbm は自動的にこのデータを解放
       することはしない。 必要の無くなった領域を解放するのはプログラマの責任である。

       データを参照せずに、検索だけする場合には:

         ret = gdbm_exists ( dbf, key )

       dbfgdbm_open から返ってきたポインタである。 key は検索したいキーデータである。

       データベース内に  key が見つかれば、返り値 ret は true である。 何も対応するものが見つから
       なければ ret は false である。 gdbm_fetch ではメモリ確保が行われるが、このルーチンはそれを
       しない ので、レコードの存在をチェックをする時に役に立つ。

       データベースからあるデータを削除する場合は、以下のようにする:

          ret = gdbm_delete ( dbf, key )

       dbfgdbm_open から返ってきたポインタである。 key はキーデータである。

       アイテムが存在しなかったり、要求したのがリーダだった場合、 返り値は -1 である。 削除に成功
       すれば返り値は 0 である。

       次の 2 つのルーチンは、データベース中のすべてのアイテムにアクセスできる。 アクセスはキー順
       ではないが、データベース内ですべてのキーに各  1 回 アクセスすることは保証されている。(アク
       セス順序はハッシュ値の順になる。)

         key = gdbm_firstkey ( dbf )

         nextkey = gdbm_nextkey ( dbf, key )

       dbfgdbm_open から返ってきたポインタである。key は キーデータである。

       返り値はどちらも datum 型である。返り値の dptr  要素が  NULL  の場合、最初のキーまたは次の
       キーがなかったことを示す。  返り値の dptr 要素が指しているのは malloc(3C) により確保された
       データであり、gdbm は free してはくれないことに もう一度注意すること。

       これらの関数はデータベースをリードオンリーで参照することを意図していた。  たとえば、データ
       ベースの正当性を確認したりするような目的で。

       ファイルへの「参照」は「ハッシュ・テーブル」に基づいている。  gdbm_delete はハッシュ・テー
       ブルを再構成して、「見つけられることのない」      アイテムがテーブルの中で放置されないよう
       に、すべての競合を確認する。  すべてのデータの実体に変更を加えなかったとしても、オリジナル
       のキーの  順序は保証されない。以下のループが実行された場合、いくつかのキーが見つけられない
       ことが起こり得る。

          key = gdbm_firstkey ( dbf );
          while ( key.dptr ) {
             nextkey = gdbm_nextkey ( dbf, key );
             if ( some condition ) {
                gdbm_delete ( dbf, key );
                free ( key.dptr );
             }
             key = nextkey;
          }

       以下のルーチンは繰り返し使われるべきではない。

         ret = gdbm_reorganize ( dbf )

       もしあなたがたくさんの削除を行い、gdbm ファイルが使っている スペースを小さくしたいと思うな
       らば、このルーチンはデータベースの再構成を行う。 gdbm はこの再構成以外で gdbm が使っている
       ファイルの大きさを 小さくすることは無い。(削除されたスペースは再利用される)

       データベースが  GDBM_SYNC  フラグ付きで  open  されない限り、gdbm  は次の動作を 継続する前
       に、write がディスクにフラッシュするのを待つようなことはしない。  次のルーチンはデータベー
       スを物理的にディスクに書き出すことを保証する。

         gdbm_sync ( dbf )

       これはメインメモリの状態をディスクの状態と同期させるまでは戻って来ない。

       gdbm のエラーコードを英文のテキストに変換するには、次のルーチン を利用する。

         ret = gdbm_strerror ( errno )

       ここで errnogdbm_error 型であり、通常はグローバル変数 の gdbm_errno である。対応するフ
       レーズが返ってくる。

       gdbm は既に open されているファイルに対するオプションを設定できる 機能をサポートしている。

         ret = gdbm_setopt ( dbf, option, value, size )

       ここで、dbf  は直前の  gdbm_open  の返り値であり、  option  は設定したいオプションを指定す
       る。現在の正しいオプションは:

       GDBM_CACHESIZE  -  内部の bucket キャッシュのサイズを指定する。 このオプションは GDBM_FILE
       のディスクリプタに一度だけ設定でき、 データベースの最初のアクセス時に自動的に 100 が設定さ
       れる。

       GDBM_FASTMODE  -  fast  mode  の  on, off を指定する。 fast mode は すでにオープンされてい
       て、アクティブなデータベースに 対してトグル (on, off) できる。value (以下参照) は TRUE  か
       FALSE が設定できる。 このオプションはもう使われない。

       GDBM_SYNCMODE  - ファイルシステムの同期処理を on, off する。 この設定のデフォルトは off で
       ある。 value (以下参照) は TRUE か FALSE を指定する。

       GDBM_CENTFREE - central フリーブロックプール を on, off する。 デフォルトは off であり、こ
       れは以前のバージョンの   gdbm   のフリー  ブロックの取り扱いと同じである。もし、設定される
       と、このオプションは  その後はフリーブロックはグローバルプールにおかれ、(理論的には)  より
       多くのファイルスペースがより早く再利用されるようになる。 value (以下参照) は TRUE か FALSE
       を設定すべきである。 注意:この機能はまだ検討中である。

       GDBM_COALESCEBLKS - フリーブロックマージングの on, off を設定する。 デフォルトは off  で前
       のバージョンの gdbm のフリーブロック の扱いと 同じである。もし、設定されるとこのオプション
       は、付近にあるフリーブロック をマージする。これは 特にGDBM_CENTFREE と一緒に使われたとして
       も  時間と  CPU  のかかる処理になる。value (以下参照) は TRUE か FALSE を 設定するべきであ
       る。 注意:この機能はまだ検討中である。

       valueoption に設定する値であり、integer へのポインタ である。 sizevalue によってポ
       イントされるデータの  サイズである。返り値は 失敗した場合 -1 になり、成功したら 0 になる。
       失敗の場合、グローバル変数の gdbm_errno には値が設定される。

       例えば、gdbm_open でオープンしたデータベースをアクセスする前に、 キャッシュとして 10  を使
       うように設定する場合、以下のコードが利用できる:

         int value = 10;

         ret = gdbm_setopt( dbf, GDBM_CACHESIZE, &value, sizeof(int));

       もしデータベースが GDBM_NOLOCK フラグ付きでオープンされた場合、 ユーザはデータベースに対し
       て、例えば複数のライタ操作を同一のファイル  に対して行うような、自分の独自のファイルロッキ
       ングを使うことができる、

       これをサポートするため、gdbm_fdesc ルーチンが提供される。

         ret = gdbm_fdesc ( dbf )

       ここで  dbf は以前の gdbm_open の返り値である。 返り値はデータベースのファイルディスクリプ
       タである。

       以下の 2 つの外部変数は役に立つことだろう。

       gdbm_errno  は  gdbm   のエラーに関するより詳しい情報を持つ   (gdbm.h   はエラー値の定義と
       gdbm_errno を外部変数とする定義を持つ)。
       gdbm_version はバージョン情報の文字列を持つ。

       もう少し興味深いことが幾つかある。まず  gdbm は「隙間のある」 ファイルでは無いということで
       ある。あなたはこのファイルを UNIX の cp(1)  コマンドによってコピーすることが可能で、そのコ
       ピー処理の間  にファイルサイズが拡張されるようなことはない。さらに、UNIX ですでに使 われて
       いる dbm のコンパチブルモードが存在する。このコンパチブル モードでは、gdbm  のファイルポイ
       ンタはプログラマに取って必要では なく、一度には 1 つのファイルだけがオープンされる。コンパ
       チブルモード  全ての利用者はライタと見なされる。もし、gdbm  ファイルがリード  オンリーなら
       ば、ライタとしては失敗し、リーダとしてオープンし直しを  試みる。datum 構造体のすべてのポイ
       ンタは、gdbm が解放するであろう データを指す。これらは (標準的な UNIX の  dbm  がするよう
       に)  静的ポインタとして扱う必要がある。

リンク

       このライブラリはコンパイル行の最後のパラメータとして -lgdbm を 指定することで利用される。

         gcc -o prog prog.c -lgdbm

       dbmndbm との互換性ルーチンを使いたい場合は、 gdbm_compat ライブラリもリンクしなければ
       ならない。 例えば、以下のようにする。

         gcc -o prog proc.c -lgdbm -lgdbm_compat

バグ

関連項目

       dbm, ndbm

著者

       Philip A. Nelson と Jason Downs.  Copyright (C) 1990 - 1999 Free Software Foundation, Inc.

       GDBM is free software; you can redistribute it and/or modify it under the terms of the GNU
       General  Public License as published by the Free Software Foundation; either version 1, or
       (at your option)  any later version.

       GDBM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;  without
       even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
       GNU General Public License for more details.

       You should have received a copy of the GNU General Public License along with GDBM; see the
       file  COPYING.  If not, write to the Free Software Foundation, 675 Mass Ave, Cambridge, MA
       02139, USA.

       You may contact the original author by:
          e-mail:  phil@cs.wwu.edu
         us-mail:  Philip A. Nelson
       Computer Science Department
       Western Washington University
       Bellingham, WA 98226

       You may contact the current maintainer by:
          e-mail:  downsj@downsj.com

                                            10/15/2002                                    GDBM(3)