dbm数据库源代码分析(13):ndbm部分

   提供ndbm和dbm接口是为了与标准(如POSIX或X/Open规范)兼容。至于接口后面的实现,都是用gdbm部分来完成的,因此解剖了gdbm部分后,ndbm和dbm的实现就比较简单了,一般都是直接调用gdbm中的相应函数来完成的。注意用make编译时gdbm、ndbm、dbm部分都会被编译,但make install只会安装gdbm部分,若你需要使用ndbm和dbm的兼容实现,你还需要用make install-compat来安装它们。
   (1)gdbm_file_info * dbm_open(file, flags, mode)函数。打开一个数据库文件。注意与gdbm_open中的类似,这里函数实现是返回指向gdbm_file_info结构的指针变量,而在导出的头文件ndbm.h中,函数返回的是DBM型的指针变量,指向的是一个“虚设”的结构。函数用于初始化ndbm系统。file是一个指针文件名的指针变量。在标准的dbm中,数据库用.pag和.dir两个文件来存储。为了使gdbm能够兼容ndbm,我们使用同样的文件名。特别地,在调用gdbm_open时使用文件名file.pag来存储数据。如果这个文件(file.pag)为0字节大小,则会执行一个文件初始化过程,设置文件的一些初始结构。任何的出错都将导致返回-1值,没有错误则返回0。
    注意另一个文件file.dir将会被忽略并且大小总是为0字节,实现把它当作一个链接指向file.pag文件。flags和mode标志与open(2)调用中的相同。本函数将会查看flags并确定以什么样的方式调用gdbm_open。如果flags==O_RDONLY,那就是GDBM_READER;如果flags==O_RDWR|O_CREAT,那就是 GDBM_WRCREAT(创建且可写); 如果flags==O_RDWR,那就是GDBM_WRITER;如果flags包含O_TRUNC,那就是GDBM_NEWDB。flags的其他所有值都将被忽略。
   函数执行流程:
   1)设置好正确的文件名"file.pag"和"file.dir";
   2)根据flags给出的标志,以合适的方式调用gdbm_open打开数据库文件,并返回文件信息结构;
   3)如果打开的文件是新文件(即大小为0字节),删除原先的file.dir,然后让file.dir链接到file.pag,这就使两个文件的时间戳变成一样;
   4)如果不能获取文件的状态信息,直接让file.dir链接到file.pag。

   (2)void dbm_close(dbf)函数。关闭dbm数据库文件。直接调用gdbm_close来完成工作。

   (3)int dbm_store(dbf, key, content, flags)函数。向数据库存入一个新的关键字/数据对。直接调用gdbm_store来完成工作。

   (4)datum dbm_fetch(dbf,key)函数。在数据库dbf中查找给定的关键字,返回其关联的数据。程序先调用gdbm_fetch来完成工作,然后还要把返回数据的起始地址保存在char*型全局变量_gdbm_fetch_val中。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值