Tokyo Cabinetを試してみる

Tokyo Cabinet第1版基本仕様書

に書かれているサンプルから、試してみる事にする。

試したコードはハッシュデータベースを使ったコード例

まず下記ソースコードをtchdb.cというファイルで保存した。

#include <tcutil.h>
#include <tchdb.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>

int main(int argc, char **argv){

   TCHDB *hdb;
   int ecode;
   char *key, *value;

   /* オブジェクトを作成する */
   hdb = tchdbnew();

   /* データベースを開く */
   if(!tchdbopen(hdb, "casket.hdb", HDBOWRITER | HDBOCREAT)){
       ecode = tchdbecode(hdb);
       fprintf(stderr, "open error: %s\n", tchdberrmsg(ecode));
   }

   /* レコードを格納する */
   if(!tchdbput2(hdb, "foo", "hop") ||
    !tchdbput2(hdb, "bar", "step") ||
    !tchdbput2(hdb, "baz", "jump")){
       ecode = tchdbecode(hdb);
       fprintf(stderr, "put error: %s\n", tchdberrmsg(ecode));
   }

   /* レコードを取得する */
   value = tchdbget2(hdb, "foo");
   if(value){
       printf("取得した値を表示:%s\n", value);
       free(value);
   } else {
       ecode = tchdbecode(hdb);
       fprintf(stderr, "get error: %s\n", tchdberrmsg(ecode));
   }

   /* 横断的にレコードを参照する */
   tchdbiterinit(hdb);
   while((key = tchdbiternext2(hdb)) != NULL){
       value = tchdbget2(hdb, key);
       if(value){
         printf("レコードを参照:%s:%s\n", key, value);
         free(value);
       }
       free(key);
   }

   /* データベースを閉じる */
   if(!tchdbclose(hdb)){
       ecode = tchdbecode(hdb);
       fprintf(stderr, "close error: %s\n", tchdberrmsg(ecode));
   }

   /* オブジェクトを破棄する */
   tchdbdel(hdb);

   return 0;
}

ファイルを確認する。

$ ls
tchdb.c

Cファイルが1つだけあるので、このファイルをコンパイルする必要がある。 次にファイルをコンパイルするのだが、 リンカオプションには

  • -ltokyocabinet
  • -lz
  • -lbz2
  • -lpthread
  • -lm
  • -lc

を加えてコンパイルする必要がある。 この時に作成する実行ファイルは今回は「tchdb」としたので、コマンドは下記になる。

$ cc -I/usr/local/include tchdb.c -o tchdb -L/usr/local/lib -ltokyocabinet -lz -lbz2 -lpthread -lm -lc
$ ls
tchdb*  tchdb.c

tchdbという実行ファイルがある事を確認。 次にそのファイルを実行する。

$ ./tchdb
取得した値を表示:hop
レコードを参照:foo:hop
レコードを参照:bar:step
レコードを参照:baz:jump

と表示されるはず。 実際に「casket.hdb」ファイルが出来ているかを確認する。

$ ls
casket.hdb  tchdb*  tchdb.c

出来ているので、試しに同じkeyへ他の値を入れてみる。 putしている部分で、fooに対して日本語の「ほげ」を入れてみる。

if(!tchdbput2(hdb, "foo", "ほげ") ||

書き換えたら、再度コンパイルして実行。

$ cc -I/usr/local/include tchdb.c -o tchdb -L/usr/local/lib -ltokyocabinet -lz -lbz2 -lpthread -lm -lc
$ ./tchdb
取得した値を表示:ほげ
レコードを参照:foo:ほげ
レコードを参照:bar:step
レコードを参照:baz:jump

こんな感じになった。 とりあえず日本語が通る事が確認でけた。

Posted at: 
2009/01/16 09:29:36
0 Comments
0 TrackBacks
Tags: 
TokyoCabinet
Trackback: 
http://kishi-r.com/2009/01/16/c_tokyocabinet/trackback/

TrackBacks

まだ登録されていません。

Comments

まだ登録されていません。

Add Comment

Add Comment

kishirをフォローしましょう



あわせて読みたい 人気ブログランキング - kishi-r.com track feed

Categories