bdb.c

来自「常用软件包,可以保存,做为日常函数调用,比较通用」· C语言 代码 · 共 102 行

C
102
字号
#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 + =
减小字号Ctrl + -
显示快捷键?