📄 bdb.c
字号:
#include "bdb.h"#include <pthread.h>#define min(a, b) ((a < b)? a : b)pthread_mutex_t waitht_mutex;////////////////////////////////////////////////////////// Berkeley DB manupilation functions//////////////////////////////////////////DB *bdbCreateOpen(char *filename) { DB *dbp; pthread_mutex_lock(&waitht_mutex); if ((dbp = dbopen(filename, O_CREAT | O_RDWR, 0666, DB_BTREE, NULL)) == NULL) { pthread_mutex_unlock(&waitht_mutex); return NULL; } pthread_mutex_unlock(&waitht_mutex); return dbp;}int Bdb_get(DB *dbp, char *name, int name_len, char *value, int value_len) { DBT db_key, db_data; int err; pthread_mutex_lock(&waitht_mutex); db_key.data = name; db_key.size = name_len; if ((err = dbp->get(dbp, &db_key, &db_data, 0))) { pthread_mutex_unlock(&waitht_mutex); return err; } else memcpy(value, db_data.data, min(value_len, db_data.size)); pthread_mutex_unlock(&waitht_mutex); return 0;}int Bdb_del(DB *dbp, char *name, int name_len) { DBT db_key; int err; flock(dbp->fd(dbp),LOCK_SH); pthread_mutex_lock(&waitht_mutex); db_key.data = name; db_key.size = name_len; if ((err = dbp->del(dbp, &db_key, 0))) { pthread_mutex_unlock(&waitht_mutex); return err; } pthread_mutex_unlock(&waitht_mutex); flock(dbp->fd(dbp),LOCK_UN); return 0;}int Bdb_put(DB *dbp, char *name, int name_len, char *value, int value_len) { DBT db_key, db_data; int rtn; flock(dbp->fd(dbp),LOCK_SH); pthread_mutex_lock(&waitht_mutex); db_key.data = name; db_key.size = name_len; db_data.data = value; db_data.size = value_len; rtn = dbp->put(dbp, &db_key, &db_data, 0); pthread_mutex_unlock(&waitht_mutex); flock(dbp->fd(dbp),LOCK_UN); return rtn;} int Bdb_close(DB *dbp) { int rtn; flock(dbp->fd(dbp),LOCK_SH); pthread_mutex_lock(&waitht_mutex); dbp->sync(dbp, 0); rtn = dbp->close(dbp); pthread_mutex_unlock(&waitht_mutex); flock(dbp->fd(dbp),LOCK_UN); return rtn;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -