3 .\" Japanese Version Copyright (c) 2000 Tsugikazu Shibata
4 .\" all rights reserved.
5 .\" Translated Fri. August 29 23:32:00 JST 2000
6 .\" by Tsugikazu Shibata <ts@tsden.org>
8 GDBM - GNUデータベース・マネージャ。\fBdbm\fR および \fBndbm\fR
9 互換機能を含む。 (Version \*(ve.)
25 .B gdbm_open (name, block_size, read_write, mode, fatal_func)
29 .B int block_size, read_write, mode;
31 .B void (*fatal_func) ();
41 .B gdbm_store (dbf, key, content, flag)
45 .B datum key, content;
51 .B gdbm_fetch (dbf, key)
59 .B gdbm_delete (dbf, key)
67 .B gdbm_firstkey (dbf)
73 .B gdbm_nextkey (dbf, key)
81 .B gdbm_reorganize (dbf)
93 .B gdbm_exists (dbf, key)
101 .B gdbm_strerror (errno)
107 .B gdbm_setopt (dbf, option, value, size)
124 .B DBM Compatability routines:
137 .B store (key, content)
139 .B datum key, content;
168 .B NDBM Compatability routines:
175 .B *dbm_open (name, flags, mode)
189 .B dbm_fetch (file, key)
197 .B dbm_store (file, key, content, flags)
201 .B datum key, content;
207 .B dbm_delete (file, key)
215 .B dbm_firstkey (file)
221 .B dbm_nextkey (file)
233 .B dbm_clearerr (file)
257 GNU dbm は、キーとデータのペアを含んだデータファイルを取り扱う
259 提供されるアクセスとしては、キーによる格納、キーによる取り出し、
260 キーによる削除の他、すべてのキーに渡るソートされていない横断的な
262 一つのプロセスからは複数のデータファイルを同時に利用することができる。
264 gdbm ファイルをオープンするプロセスは、「リーダ」または「ライタ」
266 1 つの gdbm ファイルをオープンできるライタは 1 つだけだが、
267 リーダは複数が 1 つの gdbm ファイルをオープンすることができる。
269 リーダとライタは同時に同じファイルをオープンすることはできない。
270 gdbm ファイルをオープンする手続きは:
274 dbf = gdbm_open ( name, block_size, read_write, mode, fatal_func )
276 \fIname\fR はファイルの名前である。(完全な名前、gdbm はこの名前に
278 \fIblock_size\fR はディスクからメモリへ 1 回に転送されるサイズである。
279 このパラメータは、新しいファイルの場合以外は無視される。最小サイズ
281 512 よりも小さい場合には, gdbm はファイルシステムに対する stat
283 \fIread_write\fR には以下のいずれかの値を取る。
292 ライタ - データベースが存在しなければ作成する
295 ライタ - すでに存在しても新しいデータベースを作成する
297 最後の 3 つについては (データベースのライタ) \fIread_write\fR に対して
300 はすべてのデータベースの操作をディスクと同期する、また
302 はデータベースファイルに関するライブラリからのロック動作を行わない。
305 は gdbm の既定動作が no-sync モードになったためにもう使われなくなった。
307 \fImode\fR はファイルのモードである (\fBchmod(2)\fR および \fBopen(2)\fR を
308 参照)。\fI(*fatal_func) ()\fR は dbm が致命的エラーを検出した場合に呼び出す
309 関数である。この関数への唯一のパラメータは文字列である。
310 値 0 が指定されると、gdbm はデフォルトの関数を使用する。
312 返り値 \fIdbf\fR は、その gdbm ファイルにアクセスする他のすべてのルーチン
313 に必要なポインタである。 NULL ポインタが返った場合、\fBgdbm_open\fR は
315 gdbm のエラーは \fIgdbm_errno\fR に、システムのエラーは \fIerrno\fR
316 に格納される。(エラーコードについては gdbmerrno.h を参照)
319 パラメータ \fIdbf\fR は \fBgdbm_open\fR から
321 どんなファイルでもオープンしたものをクローズすることは重要である。
322 クローズはファイルに対するリーダ数/ライタ数を更新する。
327 データベースは 3 つの主なルーチンによって利用できる。最初はデータを
331 ret = gdbm_store ( dbf, key, content, flag )
334 \fIdbf\fR は \fBgdbm_open\fR から返ってきたポインタである。
335 \fIkey\fR はキーデータで、\fIcontent\fR は \fIkey\fR に関連付けられた
337 \fIflag\fR は以下のいずれかの値を持つことができる。
345 リーダが \fBgdbm_store\fR をコールした場合、返り値は -1 となる。
346 GDBM_INSERT が指定された時にデータベースに \fIkey\fR が存在すると、
347 返り値は 1 である。そうでなければ返り値は 0 である。
349 \fI注意: 既にデータベースに存在するキーを指定して格納する場合、
350 GDBM_REPLACEで呼び出しているならば、gdbm は古いデータを
352 同じキーで 2 つのデータ・アイテムを得ることはできないし、
353 また gdbm_store がエラーを返すこともない。
355 注意: gdbm のサイズは、dbm や ndbm と異なり制限されない。
356 データは必要なだけ大きくすることができる。
361 content = gdbm_fetch ( dbf, key )
363 \fIdbf\fR は \fBgdbm_open\fR から返ってきたポインタである。
366 返り値の \fIdptr\fR が NULL の場合、データは見つからなかった。
367 見つかった場合はデータへのポインタが返る。
368 \fIdptr\fR の記憶空間は \fBmalloc(3C)\fR により確保される。
369 \fBgdbm\fI は自動的にこのデータを解放することはしない。
370 必要の無くなった領域を解放するのはプログラマの責任である。\fR
372 データを参照せずに、検索だけする場合には:
374 ret = gdbm_exists ( dbf, key )
376 \fIdbf\fR は \fBgdbm_open\fR から返ってきたポインタである。
377 \fIkey\fR は検索したいキーデータである。
379 データベース内に \fIkey\fR が見つかれば、返り値 \fIret\fR は true である。
380 .\" If nothing appropiate is found, \fIret\fR will be false.
381 何も対応するものが見つからなければ \fIret\fR は false である。
383 \fBgdbm_fetch\fR ではメモリ確保が行われるが、このルーチンはそれをしない
384 ので、レコードの存在をチェックをする時に役に立つ。
386 データベースからあるデータを削除する場合は、以下のようにする:
388 ret = gdbm_delete ( dbf, key )
390 \fIdbf\fR は \fBgdbm_open\fR から返ってきたポインタである。\fIkey\fR は
393 アイテムが存在しなかったり、要求したのがリーダだった場合、
397 次の 2 つのルーチンは、データベース中のすべてのアイテムにアクセスできる。
398 アクセスはキー順ではないが、データベース内ですべてのキーに各 1 回
399 アクセスすることは保証されている。(アクセス順序はハッシュ値の順になる。)
401 key = gdbm_firstkey ( dbf )
403 nextkey = gdbm_nextkey ( dbf, key )
405 \fIdbf\fR は \fBgdbm_open\fR から返ってきたポインタである。\fIkey\fR は
408 返り値はどちらも \fBdatum\fR 型である。返り値の \fIdptr\fR 要素が NULL
409 の場合、最初のキーまたは次のキーがなかったことを示す。
410 返り値の \fIdptr\fR 要素が指しているのは \fBmalloc(3C)\fR
411 により確保されたデータであり、\fBgdbm\fR は free してはくれないことに
414 これらの関数はデータベースをリードオンリーで参照することを意図していた。
415 たとえば、データベースの正当性を確認したりするような目的で。
417 ファイルへの「参照」は「ハッシュ・テーブル」に基づいている。
418 \fIgdbm_delete\fR はハッシュ・テーブルを再構成して、「見つけられることのない」
419 アイテムがテーブルの中で放置されないように、すべての競合を確認する。
420 すべてのデータの実体に変更を加えなかったとしても、オリジナルのキーの
423 .\" It is possible that some key will not be visited if a loop like
424 .\" the following is executed:
425 以下のループが実行された場合、いくつかのキーが見つけられ
429 key = gdbm_firstkey ( dbf );
431 nextkey = gdbm_nextkey ( dbf, key );
432 if ( some condition ) {
433 gdbm_delete ( dbf, key );
440 以下のルーチンは繰り返し使われるべきではない。
443 ret = gdbm_reorganize ( dbf )
445 もしあなたがたくさんの削除を行い、\fBgdbm\fR ファイルが使っている
446 スペースを小さくしたいと思うならば、このルーチンはデータベースの再構成を行う。
447 \fBgdbm\fR はこの再構成以外で \fBgdbm\fR が使っているファイルの大きさを
448 小さくすることは無い。(削除されたスペースは再利用される)
450 データベースが GDBM_SYNC フラグ付きで open されない限り、gdbm は次の動作を
451 継続する前に、write がディスクにフラッシュするのを待つようなことはしない。
452 次のルーチンはデータベースを物理的にディスクに書き出すことを保証する。
456 これはメインメモリの状態をディスクの状態と同期させるまでは戻って来ない。
458 \fBgdbm\fR のエラーコードを英文のテキストに変換するには、次のルーチン
461 ret = gdbm_strerror ( errno )
464 ここで \fIerrno\fR は \fIgdbm_error\fR 型であり、通常はグローバル変数
465 の \fIgdbm_errno\fR である。対応するフレーズが返ってくる。
467 \fBgdbm\fR は既に open されているファイルに対するオプションを設定できる
470 ret = gdbm_setopt ( dbf, option, value, size )
472 ここで、\fIdbf\fR は直前の \fBgdbm_open\fR の返り値であり、
473 \fIoption\fR は設定したいオプションを指定する。現在の正しいオプションは:
475 \fBGDBM_CACHESIZE\fR - 内部の bucket キャッシュのサイズを指定する。
476 このオプションは \fIGDBM_FILE\fR のディスクリプタに一度だけ設定でき、
477 データベースの最初のアクセス時に自動的に 100 が設定される。
479 \fBGDBM_FASTMODE\fR - \fBfast mode\fR の on, off を指定する。
480 \fBfast mode\fR はすでにオープンされていて、アクティブなデータベースに
481 対してトグル (on, off) できる。\fIvalue\fR (以下参照) は TRUE か FALSE
482 が設定できる。このオプションはもう使われない。
484 \fBGDBM_SYNCMODE\fR - ファイルシステムの同期処理を on, off する。この
485 設定のデフォルトは off である。\fIvalue\fR (以下参照) は TRUE か FALSE
488 \fBGDBM_CENTFREE\fR - \fBcentral フリーブロックプール\fR を on, off する。
489 デフォルトは off であり、これは以前のバージョンの \fBgdbm\fR のフリー
490 ブロックの取り扱いと同じである。もし、設定されると、このオプションはそ
491 の後はフリーブロックはグローバルプールにおかれ、(理論的には) より多くの
492 ファイルスペースがより早く再利用されるようになる。
493 \fIvalue\fR (以下参照) は TRUE か FALSE を設定すべきである。
496 \fBGDBM_COALESCEBLKS\fR - フリーブロックマージングの on, off を設定
497 する。デフォルトは off で前のバージョンの \fBgdbm\fR のフリーブロック
498 の扱いと同じである。もし、設定されるとこのオプションは、付近にあるフリー
499 ブロックをマージする。これは 特に\fBGDBM_CENTFREE\fR と一緒に使われた
500 としても 時間と CPU のかかる処理になる。\fIvalue\fR (以下参照) は TRUE
504 \fIvalue\fR は \fIoption\fR に設定する値であり、integer へのポインタ
505 である。 \fIsize\fR は \fIvalue\fR によってポイントされるデータの
506 サイズである。返り値は 失敗した場合 -1 になり、成功したら 0 になる。
507 失敗の場合、グローバル変数の \fIgdbm_errno\fR には値が設定される。
509 例えば、\fBgdbm_open\fR でオープンしたデータベースをアクセスする前に、
510 キャッシュとして 10 を使うように設定する場合、以下のコードが利用できる:
514 ret = gdbm_setopt( dbf, GDBM_CACHESIZE, &value, sizeof(int));
517 もしデータベースが \fBGDBM_NOLOCK\fR フラグ付きでオープンされた場合、
518 ユーザはデータベースに対して、例えば複数のライタ操作を同一のファイル
519 に対して行うような、自分の独自のファイルロッキングを使うことができる、
521 これをサポートするため、\fIgdbm_fdesc\fR ルーチンが提供される。
523 ret = gdbm_fdesc ( dbf )
525 ここで \fIdbf\fR は以前の \fBgdbm_open\fR の返り値である。
526 返り値はデータベースのファイルディスクリプタである。
529 以下の 2 つの外部変数は役に立つことだろう。
530 \fIgdbm_errno\fR は gdbm のエラーに関するより詳しい情報を持つ。
531 (gdbm.h はエラー値の定義と gdbm_errno を外部変数とする定義を持つ)
533 \fIgdbm_version\fR はバージョン情報の文字列を持つ。
536 もう少し興味深いことが幾つかある。まず \fBgdbm\fR は「隙間のある」
537 ファイルでは無いということである。あなたはこのファイルを UNIX の
538 \fBcp(1)\fR コマンドによってコピーすることが可能で、そのコピー処理の間
539 にファイルサイズが拡張されるようなことはない。さらに、UNIX ですでに使
540 われている \fBdbm\fR のコンパチブルモードが存在する。このコンパチブル
541 モードでは、\fRgdbm\fR のファイルポインタはプログラマに取って必要では
542 なく、一度には 1 つのファイルだけがオープンされる。コンパチブルモード
543 全ての利用者はライタと見なされる。もし、\fBgdbm\fR ファイルがリード
544 オンリーならば、ライタとしては失敗し、リーダとしてオープンし直しを
545 試みる。datum 構造体のすべてのポインタは、\fBgdbm\fR が解放するであろう
546 データを指す。これらは (標準的な UNIX の \fBdbm\fR がするように)
552 このライブラリはコンパイル行の最後のパラメータとして \fI-lgdbm\fR を
556 gcc -o prog prog.c -lgdbm
565 by Philip A. Nelson and Jason Downs.
566 Copyright (C) 1990 - 1999 Free Software Foundation, Inc.
568 GDBM is free software; you can redistribute it and/or modify
569 it under the terms of the GNU General Public License as published by
570 the Free Software Foundation; either version 1, or (at your option)
573 GDBM is distributed in the hope that it will be useful,
574 but WITHOUT ANY WARRANTY; without even the implied warranty of
575 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
576 GNU General Public License for more details.
578 You should have received a copy of the GNU General Public License
579 along with GDBM; see the file COPYING. If not, write to
580 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
582 You may contact the original author by:
584 e-mail: phil@cs.wwu.edu
586 us-mail: Philip A. Nelson
588 Computer Science Department
590 Western Washington University
594 You may contact the current maintainer by:
596 e-mail: downsj@downsj.com