0
我有以下創建Berkeley DB環境的程序。Berkeley DB SIGBUS錯誤
#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不應該這樣做嗎? – florinp