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

dbm数据库源代码分析(10):gdbmstore.c、gdbmfetch.c和gdbmdelete.c

2013年09月01日 ⁄ 综合 ⁄ 共 6546字 ⁄ 字号 评论关闭

   (1)int gdbm_store(dbf,key,content,flags)函数。向数据库中存入新的关键字/数据。key为关键字,content为数据项。要注意的是gdbm实现时对存储数据大小没有限制。操作流程:
     1)若数据库不可写或者要存的数据为空,则返回-1;
     2)调用_gdbm_findkey在数据库中查找这个关键字,若找到,当flags为GDBM_REPLACE时用新数据项覆盖关键字原来关联的数据,当flags为GDBM_INSERT时,则于数据已存在而不可插入,返回1;
     3)若没找到这个关键字,则扫描桶缓存,找到一个未存放数据的桶元素,把关键字/数据存入这个桶元素中去;
     4)最后把关键和数据写入文件,调用_gdbm_end_update把缓存中的所有更改也写入文件。

   (2)datum gdbm_fetch(dbf,key)函数。查找给定关键字,返回其所关联的数据。返回的datum结构中的指针域会指向一个动态分配的内存块(存放了数据),而不是磁盘文件上的地址。程序调用_gdbm_findkey在数据库中查找关键字,若找到,则复制其关联的数据到datum结构中,并返回这个datum结构。

   (3)int gdbm_delete(dbf,key)函数。从数据库dbf中删除给定的关键字和其关联的数据。在从本过程返回之前,磁盘上的文件会被更新以反映新数据库文件的结构。操作流程:
     1)若数据库不可写,则返回-1;
     2)调用_gdbm_findkey在数据库中查找这个关键字,根据返回的位置,保存关键字所在的桶元素,然后删除这个桶元素;
     3)把后面的所有存放了数据的桶元素前移,以确保它们能被找到;
     4)释放关键字数据的文件空间;
     5)清除当前缓存项中的数据,然后调用_gdbm_end_update完成数据库文件的所有更新。

【上篇】
【下篇】

抱歉!评论已关闭.