免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2226 | 回复: 2
打印 上一主题 下一主题

[其他] berkeley db 如何检测数据库已经存在 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-12-26 15:39 |只看该作者 |倒序浏览
berkeley db 如何检测数据库已经存在
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4. #include <string.h>
  5. #include <pthread.h>
  6. #include <errno.h>
  7. #include <db.h>

  8. void init_dbt (DBT *key, DBT *data)
  9. {
  10.         memset (key, 0, sizeof (DBT));
  11.         memset (data, 0, sizeof (DBT));
  12. }

  13. int main ()
  14. {
  15.         DB_ENV        *dbenv         = NULL;
  16.         DB        *dbp        = NULL;
  17.         int         ret         = 0;
  18.         DBC        *dbc        = NULL;
  19.         DBT        key         = {0,};
  20.         DBT        data        = {0,};
  21.         int         i        = 10;       
  22.         #if 1
  23.         if (db_env_create (&dbenv, 0)) {
  24.                 printf ("db_env_create %s\n", db_strerror (ret));
  25.                 goto out;
  26.         }
  27.         printf ("env create success\n");
  28.         //dbenv->set_errpfx (dbenv, "brick_name");
  29.        
  30.         ret = dbenv->open (dbenv, "/tmp/wyz",
  31.                 DB_CREATE|DB_INIT_LOG|DB_INIT_LOCK|
  32.                         DB_INIT_MPOOL, 0);
  33.         if (ret) {
  34.                 printf ("dbenv_open :%s\n", db_strerror (ret));       
  35.                 goto out;
  36.         }
  37.         #endif
  38.         ret = db_create (&dbp, dbenv, 0);
  39.         if (ret) {
  40.                 printf ("db_create %s\n", db_strerror (ret));
  41.                 goto out;
  42.         }
  43.         ret = dbp->open (dbp, NULL, "a.db", NULL, DB_HASH, DB_CREATE, 0);
  44.         if (ret) {
  45.                 printf ("db_open %s\n", db_strerror (ret));
  46.                 goto out;
  47.         }
  48.         ret = dbp->cursor (dbp, NULL, &dbc, 0);
  49.         if (ret) {
  50.                 printf ("cursor : %s\n", db_strerror (ret));
  51.                 goto out;
  52.         }
  53.         init_dbt (&key, &data);
  54.         key.data = &i;
  55.         key.size = sizeof (int);
  56.         data.data = &i;
  57.         data.size = sizeof (int);

  58.         while (i) {
  59.                 printf ("put ===============key = %d data = %d\n",*(int*)key.data, *(int*)data.data );
  60.                 ret = dbp->put (dbp, NULL, &key, &data, DB_NOOVERWRITE);
  61.                 if (ret) {
  62.                         printf ("db_put %s\n", db_strerror (ret));
  63.                         break;
  64.                 }
  65.                 i--;
  66.         }
  67.         while (1) {
  68.                 ret = dbc->get (dbc, &key, &data, DB_NEXT);
  69.                 sleep (1);
  70.                 if (ret) {
  71.                         printf ("cursor get : %s\n", db_strerror (ret));
  72.                         break;
  73.                 }
  74.                 printf ("get ===================key = %d data = %d\n",*(int*)key.data, *(int*)data.data );
  75.         }
  76. out:
  77.         return ret;       
  78. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2013-01-09 21:41 |只看该作者
同问啊,万一程序以外终止,没有进行正常关闭,销毁句柄,再次起来,就会出现在put时候卡住的情况.

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
3 [报告]
发表于 2013-02-02 16:35 |只看该作者
路过看看了~
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP