您的位置:首页 > 数据库

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

2016-07-29 00:00 369 查看
(5)int dbm_delete(dbf,key)函数。从数据库中删除给定的关键字及其关联的数据。直接调用gdbm_delete来完成工作。

/* 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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: