dbm数据库源代码分析(14):ndbm部分(续)
2016-07-29 00:00
369 查看
(5)int dbm_delete(dbf,key)函数。从数据库中删除给定的关键字及其关联的数据。直接调用gdbm_delete来完成工作。
(6)int dbm_dirfno(dbf)函数。返回.dir文件的描述符,现在只有一个文件(.dir文件是作为一个链接名指向.pag文件的),故返回这个唯一的文件的描述符。
(7)int dbm_pagfno(dbf)函数。返回.pag文件的描述符,现在只有一个文件,故返回这个唯一的文件的描述符。
(8)int dbm_rdonly(dbf)函数。检查打开的数据是否是只读的,用的不多,只是为了兼容性而提供的。
(9)datum dbm_firstkey(dbf)函数。返回数据库的第一个散列桶中的第一个关键字。程序先调用gdbm_firskey来完成工作,然后还要把返回的关键字保存在datum型全局变量_gdbm_memory中。
(10)datum dbm_nextkey (dbf)函数。返回文件dbf中当前关键字的下一个关键字,当前关键字保存在全局变量_gdbm_memory中。程序用当前关键字调用gdbm_nextkey返回下一个关键字,之后清空当前关键字的内空,并把新的关键字保存到全局变量_gdbm_memory中。
/* dbmdelete.c - 从数据库中删除给定的关键字及其关联的数据。 */ #include "autoconf.h" #include "gdbmdefs.h" #include "extern.h" /* 从数据库dbf中删除给定的key及其关联的数据项 */ int dbm_delete (dbf,key) gdbm_file_info *dbf; datum key; { return gdbm_delete (dbf,key); }
(6)int dbm_dirfno(dbf)函数。返回.dir文件的描述符,现在只有一个文件(.dir文件是作为一个链接名指向.pag文件的),故返回这个唯一的文件的描述符。
/* dbmdirfno.c - 返回.dir文件的描述符 */ #include "autoconf.h" #include "gdbmdefs.h" /* 返回.dir文件的描述符,现在只有一个文件,故返回这个唯一的文件的描述符 */ int dbm_dirfno (dbf) gdbm_file_info *dbf; { return (dbf->desc); }
(7)int dbm_pagfno(dbf)函数。返回.pag文件的描述符,现在只有一个文件,故返回这个唯一的文件的描述符。
/* dbmpagfno.c - 返回.pag文件的描述符 */ #include "autoconf.h" #include "gdbmdefs.h" /* 返回.pag文件的描述符,现在只有一个文件,故返回这个唯一的文件的描述符 */ int dbm_pagfno (dbf) gdbm_file_info *dbf; { return (dbf->desc); }
(8)int dbm_rdonly(dbf)函数。检查打开的数据是否是只读的,用的不多,只是为了兼容性而提供的。
/* dbmrdonly.c - 检查打开的数据是否是只读的 */ /* 首先包含系统配置方面的头文件 */ #include "autoconf.h" #include "gdbmdefs.h" /* 本函数用的不多,只是为了兼容性而提供的 */ int dbm_rdonly(dbf) gdbm_file_info *dbf; { return (dbf->read_write == GDBM_READER); }
(9)datum dbm_firstkey(dbf)函数。返回数据库的第一个散列桶中的第一个关键字。程序先调用gdbm_firskey来完成工作,然后还要把返回的关键字保存在datum型全局变量_gdbm_memory中。
(10)datum dbm_nextkey (dbf)函数。返回文件dbf中当前关键字的下一个关键字,当前关键字保存在全局变量_gdbm_memory中。程序用当前关键字调用gdbm_nextkey返回下一个关键字,之后清空当前关键字的内空,并把新的关键字保存到全局变量_gdbm_memory中。
/* dbmseq.c - 用来访问数据库中的所有关键字/数据 */ #include "autoconf.h" #include "gdbmdefs.h" #include "extern.h" /* 返回文件上第一个散列桶中的第一个关键字 */ datum dbm_firstkey (dbf) gdbm_file_info *dbf; { datum ret_val; /* 释放先前的动态内存,调用实际函数,然后保存指针指向新的内存 */ ret_val = gdbm_firstkey (dbf); /* datum型全局变量_gdbm_memory在extern.h中声明,在global.c中定义,用来保存返回的关键字 */ if (_gdbm_memory.dptr != NULL) free (_gdbm_memory.dptr); /* 释放先前的动态内存 */ _gdbm_memory = ret_val; /* 返回找到的关键字 */ return ret_val; } /* 返回文件dbf中当前关键字的下一个关键字,当前关键字保存在全局变量_gdbm_memory中 */ datum dbm_nextkey (dbf) gdbm_file_info *dbf; { datum ret_val; /* 确保当前关键字是一个有效的关键字 */ if (_gdbm_memory.dptr == NULL) return _gdbm_memory; /* 用当前关键字调用gdbm_nextkey返回下一个关键字,之后清空当前关键字的内空,并保存为下一个关键字 */ ret_val = gdbm_nextkey (dbf,_gdbm_memory); if (_gdbm_memory.dptr != NULL) free (_gdbm_memory.dptr); _gdbm_memory = ret_val; /* 返回新的值 */ return ret_val; }
相关文章推荐
- SQLite剖析(2):编译及应用
- dbm数据库源代码分析(9):global.c、version.c和update.c
- iOS mac终端下的SQL语句
- SQLite剖析(9):动态内存分配
- SQLite剖析(6):临时文件和内存数据库
- Oracle官方并发教程(2)
- SQLite剖析(7):锁和并发控制
- 数据库集群技术漫谈
- dbm数据库源代码分析(1):概述
- SQLite剖析(4):数据类型
- dbm数据库源代码分析(13):ndbm部分
- SQLite剖析(10):异步IO模式、共享缓存模式和解锁通知
- dbm数据库源代码分析(10):gdbmstore.c、gdbmfetch.c和gdbmdelete.c
- dbm数据库源代码分析(14):ndbm部分(续)
- dbm数据库源代码分析(5):gdbmopen.c和gdbmclose.c
- SQLite剖析(2):编译及应用
- dbm数据库源代码分析(9):global.c、version.c和update.c
- SQLite剖析(9):动态内存分配
- SQLite剖析(6):临时文件和内存数据库
- dbm数据库源代码分析(8):hash.c和findkey.c