Tokyo Cabinet

https://gist.github.com/cooldaemon/148113

Makefile

CC = gcc
SOURCES = $(wildcard *.c)
OBJECTS = $(SOURCES:%.c=%.o)
 
TARGET = test
 
$(TARGET): $(OBJECTS)
$(CC) $(OBJECTS) -o $@ \
-ltokyocabinet -lz -lbz2 -lpthread -lm -lc
 
.c.o:
$(CC) -c $<
 
clean:
rm -f $(TARGET) $(OBJECTS)


#include <stdio.h>
#include <tcutil.h>
#include <tchdb.h>
 
void cleanup(TCHDB *);
void print_value(TCHDB *, const char *);
void print_error(TCHDB *);
 
int main(int argc, char *argv[]) {
TCHDB *hdb = tchdbnew();
 
if (!tchdbopen(hdb, "test.tch", HDBOWRITER | HDBOCREAT)) {
print_error(hdb);
tchdbdel(hdb);
return -1;
}
 
if(
!tchdbput2(hdb, "foo", "hop") ||
!tchdbput2(hdb, "bar", "step") ||
!tchdbput2(hdb, "baz", "jump")
){
print_error(hdb);
cleanup(hdb);
return -1;
}
 
print_value(hdb, "foo");
 
tchdbiterinit(hdb);
char *key;
while ((key = tchdbiternext2(hdb)) != NULL) {
print_value(hdb, key);
tcfree(key);
}
 
cleanup(hdb);
return 0;
}
 
void cleanup(TCHDB *hdb) {
if (!tchdbclose(hdb)) {
print_error(hdb);
}
 
tchdbdel(hdb);
}
 
void print_value(TCHDB *hdb, const char *key) {
char *value = tchdbget2(hdb, key);
if (value) {
printf("get value: %s\n", value);
tcfree(value);
} else {
print_error(hdb);
}
}
 
void print_error(TCHDB *hdb) {
int ecode = tchdbecode(hdb);
fprintf(stderr, "open error: %s\n", tchdberrmsg(ecode));

你可能感兴趣的:(Tokyo Cabinet)