berkeley db 如何检测数据库已经存在
berkeley db 如何检测数据库已经存在#include <stdio.h>#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <pthread.h>
#include <errno.h>
#include <db.h>
void init_dbt (DBT *key, DBT *data)
{
memset (key, 0, sizeof (DBT));
memset (data, 0, sizeof (DBT));
}
int main ()
{
DB_ENV *dbenv = NULL;
DB *dbp = NULL;
int ret = 0;
DBC *dbc = NULL;
DBT key = {0,};
DBT data = {0,};
int i = 10;
#if 1
if (db_env_create (&dbenv, 0)) {
printf ("db_env_create %s\n", db_strerror (ret));
goto out;
}
printf ("env create success\n");
//dbenv->set_errpfx (dbenv, "brick_name");
ret = dbenv->open (dbenv, "/tmp/wyz",
DB_CREATE|DB_INIT_LOG|DB_INIT_LOCK|
DB_INIT_MPOOL, 0);
if (ret) {
printf ("dbenv_open :%s\n", db_strerror (ret));
goto out;
}
#endif
ret = db_create (&dbp, dbenv, 0);
if (ret) {
printf ("db_create %s\n", db_strerror (ret));
goto out;
}
ret = dbp->open (dbp, NULL, "a.db", NULL, DB_HASH, DB_CREATE, 0);
if (ret) {
printf ("db_open %s\n", db_strerror (ret));
goto out;
}
ret = dbp->cursor (dbp, NULL, &dbc, 0);
if (ret) {
printf ("cursor : %s\n", db_strerror (ret));
goto out;
}
init_dbt (&key, &data);
key.data = &i;
key.size = sizeof (int);
data.data = &i;
data.size = sizeof (int);
while (i) {
printf ("put ===============key = %d data = %d\n",*(int*)key.data, *(int*)data.data );
ret = dbp->put (dbp, NULL, &key, &data, DB_NOOVERWRITE);
if (ret) {
printf ("db_put %s\n", db_strerror (ret));
break;
}
i--;
}
while (1) {
ret = dbc->get (dbc, &key, &data, DB_NEXT);
sleep (1);
if (ret) {
printf ("cursor get : %s\n", db_strerror (ret));
break;
}
printf ("get ===================key = %d data = %d\n",*(int*)key.data, *(int*)data.data );
}
out:
return ret;
}
同问啊,万一程序以外终止,没有进行正常关闭,销毁句柄,再次起来,就会出现在put时候卡住的情况. 路过看看了~:lol:victory:
页:
[1]