berkeley db DB_ENV->close()

#include <db.h>

int
DB_ENV->close(DB_ENV *dbenv, u_int32_t flags); 

DB_ENV ->close()方法关闭数据库环境,释放所有被分配的资源以及关闭所有在环境中打开的数据库的句柄,以及子系统(subsystem)。

调用此方法时,所有打开的db handle和db_cursor handle将会自动关闭。

在多线程的环境中,db_env->close()方法关闭数据库环境,相当于每个数据库都调用了一次db->close(DB_NOSYNC),你可以使用db_env->close(DB_FORCESYNC)强制同步每个打开的数据库。保证数据写入数据库。

当还有db_txt, db_logc, db_mpoolfile handle没有关闭的时候,env handle不应该被关闭,因为前者都依赖于打开的数据库环境,比如db_txt hande,应当等事务已经被提交或者被中断后,才能关闭env handle。


如果db_env初始化时带了标志位db_init_lock,那么db_env->close()并不会释放任何锁, 需要释放锁,可以尝试使用db_env->lock_vec()方法。

如果db_env初始化时带了标志位db_init_mpool,那么db_env->close()将会引发db_mpoolfile->close()的调用,但是并不意味着调用db_mpoolfile->sync()。

db_env->close()调用后,db_env handle不能再被访问,否则会引发不可预知的错误。

成功返回0,失败返回非0。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值