现在的位置: 首页 > 综合 > 正文

dbm数据库源代码分析(16):测试程序和转换程序

2013年11月10日 ⁄ 综合 ⁄ 共 18948字 ⁄ 字号 评论关闭

   注意测试程序和转换程序默认不会被编译,默认的make命令只会编译gdbm、ndbm和dbm部分,你必须另外用make prog来编译测试和转换程序。
   (1)gdbm测试程序testgdbm.c:用于测试gdbm各个功能的程序。为测试的方便,封装了4个函数用于打印相关信息,最后main函数实现各个功能的测试。
   void print_bucket(bucket, mesg):打印散列桶bucket中的每个桶元素内容,mesg指定一个要显示的提示串。程序扫描每个桶元素并打印其内容。
   void _gdbm_print_avail_list (dbf):打印文件头的可用块列表中的所有可用块信息。程序先打印文件头可用块列表中的每个可用块信息,然后打印文件上可用块栈中的每个可用块信息。
   void _gdbm_print_bucket_cache (dbf):打印桶缓存数组中的内容。
   void usage (s):打印启动测试程序时命令行选项的使用格式帮助。
   main函数:testgdbm的主函数,执行流程:
     1)循环调用getopt解析命令行的每个选项;
     2)根据命令行选项的值以适当的方式打开数据库;
     3)设置这个数据库的缓存大小;
     3)根据用户的输入的测试命令,完成gdbm各个功能的测试。
   testgdbm程序的使用方法为testgdbm [-r or -ns] [-b block-size] [-c cache-size] [-g gdbm-file],命令行选项含义如下:
           -s              指定作磁盘同步操作
           -r              指定数据库为只读
           -n              指定总是创建新的数据库(可写)
           -c cache-size   指定缓存大小
           -b block-size   指定传递块大小
           -g gdbm-file    指定数据库文件名
   所有的dbm、ndbm、gdbm测试程序都支持的标准测试命令:
           c - 统计数据库的关键字/数据对的数目
           d - 在数据库中删除用户输入的关键字
           f - 查找给定的关键字,并显示其关联的数据
           n - 显示给定关键字的下一个关键字及其关联的数据
           q - 退出本测试程序
           s - 向数据库中存入给定的关键字和数据
           1 - 显示数据库中的第一个关键及其数据
           2 - 显示当前关键字的下一个关键及其数据
           ? - 显示帮助信息,即本命令列表
   下面是只有testgdbm程序才支持的特殊测试命令:
           r - 重组数据库文件
           A - 打印文件头的可用块列表中的所有可用块信息
           B - 获取指定目录索引处的散列桶,使之成为当前桶
           C - 打印当前散列桶中每个桶元素的内容
           D - 打印散列目录表中的每个目录项
           F - 打印文件头的中各个域
           H - 计算并显示给定关键字的哈希值
           K - 打印桶缓存数组中的内容
           V - 打印gdbm的版本号

   (2)testndbm.c:用于测试ndbm各个功能的程序。它的实现与testgdbm类似,只不过testndbm不支持命令行选项,且只实现了标准的测试命令。测试各个功能时使用的当然是ndbm的接口了。

   (3)testdbm.c:用于测试dbm各个功能的程序。它的实现与testgdbm类似,只不过testdbm不支持命令行选项,且只实现了标准的测试命令。测试各个功能时使用的当然是dbm的接口了。

   (4)conv2gdbm.c:把dbm文件转换成gdbm文件的程序。操作流程:
     1)循环调用getopt解析命令行的每个选项;
     2)设置好dbm文件名和可选的gdbm文件名;
     3)打开dbm文件和gdbm文件;
     4)把dbm文件中的所有关键字/数据对插入到gdbm文件中;
     5)最后报告统计的出错次数和插入记录数。
   conv2gdbm程序的使用方法为conv2gdbm [-q] [-b block_size] dbmfile [gdbmfile],命令行选项含义:
-q             是否静静地进行转换,即不显示任何的提示信息
-b block_size  指定传递块大小

抱歉!评论已关闭.