dbm数据库源代码分析(10):gdbmstore.c、gdbmfetch.c和gdbmdelete.c
来源:互联网 发布:李小龙技击术软件 编辑:程序博客网 时间:2024/05/23 16:25
(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完成数据库文件的所有更新。
- dbm数据库源代码分析(10):gdbmstore.c、gdbmfetch.c和gdbmdelete.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数据库源代码分析(12):gdbmreorg.c、gdbmseq.c和gdbmsetopt.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):构建性文件
- VPC中Windows server 2003无声音的解决方案
- Prototype框架源码分析汇总
- Linux下安装w3m
- 用万用表判断三极管管脚
- 五行和五脏
- dbm数据库源代码分析(10):gdbmstore.c、gdbmfetch.c和gdbmdelete.c
- PostThreadMessage window线程间传送消息
- 使用InstallAnywhere7.1制作Java exe程序安装包
- WPF程序本地化的方法Localization
- JAVA中初始化和清除、函数的重载、缺省构造函数
- sql语句优化问题
- 使用c/c++中的垃圾收集库——libgc
- 初试ecplie建立java程序
- 女孩子做程序员真让人心疼