GDBMを使ってみる1

GDBMは拡張可能ハッシュを使用するデータベース関数のライブラリである.UNIXのdbmに似たようなもの.
MySQLPostgreSQLのような関係データベースではなく,Key-Value格納の組み込み型のデータベースとして利用する.
今回はこのGDBMの使い方をGDBMから探っていく.

  • データベースのオープン

まずデータベースを使用するためにデータベースをオープンする必要がある.
これを行うのが以下の関数.

GDBM_FILE gdbm_open (
const char *name ,
int block_size ,
int flags ,
int mode ,
void (*fatal func)(const char *))
C言語のファイルポインタと同じような感覚でGDBM_FILEを用いてフデータベースのオープンを行えばよい.
関数の引数によってさまざまな指定が出来るので,次に引数に対する理解をしていく.

  • name

 オープンを行うデータベースの名前を記述する.

  • block_size

 ディスクからメモリへ1回に転送されるサイズを指定する.この値は初期化の時にのみ使われ,それ以外は無視される.最小のサイズは512になっており,512未満が設定されるとファイルシステムのブロックサイズが使用される.

  • flags

 ヘッダで定義されている値を使ってデータベースのフラグを設定する.
GDBM_READERを指定するとリードオンリーでデータベースを開く.
GDBM_WRITERを指定するとデータベースに対して読み書きが可能.
GDBM_WRCREATはGDBM_WRITERとほぼ同様であるが,指定したデータベースが存在しなければ新たにデータベースを作成する.
GDBM_NEWDBはGDBM_WRITERにおいてデータベースが既に存在するしないに関わらず新たに作成する.

これらのフラグのどれかを指定し,論理和により以下のフラグも設定可能.
GDBM_SYNCはデータベースに対する操作を常にディスクと同期させながら行う.
GDBM_NOLOCKデータベースファイルにt対するのロックを行わない.
GDBM_NOMMAPmmapの機能を無効にする.
またO_CLOEXECと同様の機能としてGDBM_CLOEXECが指定可能である.

  • mode

 ファイルのモードを指定する.

  • fatal_func

 致命的なエラーが発生した時に呼び出す関数を指定する.NULLを指定した場合はデフォルトの関数に設定される.

以上のオプションを利用してさまざまな条件でデータベースをオープンすることが出来る.

  • データベースのクローズ

次に開いたデータベースを閉じる関数は以下.

void gdbm_close(GDBM_FILE dbf)
引数として指定したデータベースを閉じることが出来る.

今回の最後にgdbmでデータベースを開いて閉じるサンプルソースを記載.データベースに対する書き込み読み込みは次回.

#include
#include
#include

#define TEST_DB_FILE "dbm_test"

int main(){
GDBM_FILE dbm_ptr;

dbm_ptr = gdbm_open(TEST_DB_FILE, 0, GDBM_WRCREAT, 0666, NULL);
if(!dbm_ptr){
fprintf(stderr, "Failed to open database\n");
exit(EXIT_FAILURE);
}

gdbm_close(dbm_ptr);
exit(EXIT_SUCCESS);
}