dbm数据库源代码分析(12):gdbmreorg.c、gdbmseq.c和gdbmsetopt.c
来源:互联网 发布:算法复杂性o, 编辑:程序博客网 时间:2024/05/23 17:55
_gdbm_rename和gdbm_reorganize函数在gdbmreorg.c中,其中_gdbm_rename是内部函数。get_next_key、gdbm_firstkey和gdbm_nextkey函数在gdbmseq.c中。gdbm_setopt函数在gdbmsetopt.c中。
(1)int _gdbm_rename (old_name, new_name)函数。内部函数。对文件进行重命名。如果不能重命名,则返回一个非0值,并且保证文件的old_name没有变化。
(2)int gdbm_reorganize(dbf)函数。重组数据库文件。这需要创建一个新文件,并把旧文件dbf的所有项插入到新文件中。新文件然后重命名为旧文件dbf的名字,而dbf结构也会更新成包含新文件的所有正确信息。如果一个错误发生,则返回负值。如果操作成功,则返回0值。操作流程:
1)为临时文件构造一个新文件名;
2)获取旧文件的打开模式,然后打开新的数据库文件;
3)通过gdbm_firstkey和gdbm_nextkey,获取旧数据库的每个关键字及其关联的数据,并把它存入到新数据库中;
4)用_gdbm_end_update完成数据库的所有更新,并等待更新完成;
5)把新文件重命名为原来的文件名,释放dbf中的原来一些域;
6)释放所有缓存项中的桶、关键字/数据、以及整个桶缓存数组;
7)把dbf的相关域设为新文件的正确信息;
8)等待新文件的数据写入完成,最后设置好当前缓存项指针,以及当前桶指针。
(3)void get_next_key (dbf, elem_loc, return_val)函数。从elem_loc位置开始搜索散列桶中的下一个关键字/数据项(在桶元素中),用return_val返回获取的值。程序从当前桶的elem_loc位置开始,根据散列目录表中的目录项查找每一个桶,扫描其每个桶元素,一旦发现其中有关键字/数据(即桶元素的哈希值不为-1)。一旦有,就调用_gdbm_read_entry把它读取到return_val中,并返回它。
(4)datum gdbm_firstkey(dbf)函数。返回文件上的第一个散列桶中的第一个关键字。程序先获取索引0处目录项指示的桶(第一个桶),然后寻找这个桶中的第一个关键字。
(5)datum gdbm_nextkey(dbf)函数。返回文件dbf中跟在key后面的一个关键字。程序先查找当前关键字,返回其所有桶元素的位置。然后根据这个位置调用get_next_key查找其下一个关键字。
(6)int gdbm_setopt(dbf,optflag,optval,optlen)函数。设置一个gdbm数据库的一些选项,这些选项标志参看gdbmconst.h。操作在这个打开的数据库文件描述符上进行。主要的选项有GDBM_CACHESIZE、GDBM_FASTMODE、GDBM_SYNCMODE、GDBM_CENTFREE、GDBM_COALESCEBLKS。除GDBM_CACHESIZE选项关联的值为一个正整数值外,其余选项关联的值均为布尔值。
- dbm数据库源代码分析(12):gdbmreorg.c、gdbmseq.c和gdbmsetopt.c
- dbm数据库源代码分析(5):gdbmopen.c和gdbmclose.c
- dbm数据库源代码分析(8):hash.c和findkey.c
- dbm数据库源代码分析(6):bucket.c
- dbm数据库源代码分析(7):falloc.c
- dbm数据库源代码分析(11):gdbmerrno.c、gdbmexists.c、gdbmfdesc.c和gdbmsync.c
- dbm数据库源代码分析(9):global.c、version.c和update.c
- dbm数据库源代码分析(10):gdbmstore.c、gdbmfetch.c和gdbmdelete.c
- dbm数据库源代码分析(15):dbm部分
- dbm数据库源代码分析(16):测试程序和转换程序
- dbm数据库源代码分析(17):Makefile文件和其他文件
- qsort.c源代码分析
- dbm数据库源代码分析(1):概述
- dbm数据库源代码分析(13):ndbm部分
- Gcc源代码分析,rtl.c源代码分析
- GoAhead2.5源代码分析之2-文件数据库(emfdb.c)
- 一个简单的dbm数据库的实验-----dbm打开 存储 检索 删除 扫描操作的C代码
- dbm数据库源代码分析(2):构建性文件
- java中利用JDBC连接MySQL方法总结
- Excel2003配置为SQL Server2000的【链接服务器】
- MTK图层的介绍
- windows安装mysql3.23安装
- Qtopia移植
- dbm数据库源代码分析(12):gdbmreorg.c、gdbmseq.c和gdbmsetopt.c
- Web 设计与开发者必须知道的 15 个站点
- JXDatePicker日历空间(日期选择器)
- C#多线程学习(一) 多线程的相关概念
- 车·行·记
- log4net使用详解
- Java直连Access
- OpenGL Water Tutorial
- JDBC连接数据库经验集萃