У меня есть следующая программа, которая создает среду 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 или это ошибка?
Почему, если вы проверяете, существует ли файл, а если нет, создайте пустой файл? –
Не должен ли апи делать это? – florinp