gpt4 book ai didi

c - Berkeley DB SIGBUS 错误

转载 作者:行者123 更新时间:2023-11-30 18:00:22 24 4
gpt4 key购买 nike

我有以下程序来创建 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 来避免这种情况,或者这是一个错误?

最佳答案

florinp,我认为这是 Berkeley DB 的 bug。在继续之前,确实应该检查环境中的文件是否完整。

当然,对于像这样被废弃的 CDP 数据库,除了删除它并重新开始之外,您无能为力。如果这是您必须处理的常见故障类型,您可以使用 shell 脚本包装您的程序,该脚本查找退出状态 135,然后烘焙旧数据库并重新启动程序...但这可能存在风险,具体取决于您的应用程序.

您还可以迁移到事务数据存储。这将为您提供更多的恢复选项,并且可能会减少 SIGBUS。 :)

关于c - Berkeley DB SIGBUS 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10512746/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com