【发布时间】:2012-05-09 08:51:42
【问题描述】:
我有以下创建 Berkeley DB 环境的程序。
#include <db.h>
#include <stdio.h>
int main()
{
DB_ENV *env=NULL;
DB* m_db=NULL;
if(db_env_create(&env,0)==-1) printf("fail create\n");
env->set_lk_max_locks(env, 100000);
env->set_lk_max_lockers(env, 100000);
env->set_lk_max_objects(env, 100000);
if(env->open(env,"/tmp/cc", DB_INIT_MPOOL | DB_INIT_CDB, 0)!=0)
{
printf("No env, creating one\n");
if(env->open(env, "/tmp/cc", DB_CREATE | DB_INIT_MPOOL | DB_INIT_CDB, 0) == -1)
printf("Failed creating env\n");
}
env->close(env,0);
return 0;
}
如果你删除 /tmp/cc/__db.002 文件(这是 Berkeley DB 创建的索引之一),然后重新运行程序,它会在打开环境时得到一个 SIGBUS(尝试映射一个非- 存在的文件)。有没有办法使用他们的 API 来避免这种情况,或者这是一个错误?
【问题讨论】:
-
为什么要检查文件是否存在,如果不存在,创建一个空文件?
-
api不应该这样做吗?
标签: c berkeley-db