您的位置:首页 > 数据库

dbm数据库源代码分析(11):gdbmerrno.c、gdbmexists.c、gdbmfdesc.c和gdbmsync.c

2016-07-29 00:00 288 查看
(1)const char* gdbm_strerror(error)函数。将错误码转换成错误消息字符串。

/* gdbmerrno.c - 把gdbm错误码转换成错误消息 */
/* 首先包含系统配置相关的头文件 */
#include "autoconf.h"
#include "gdbmerrno.h"
/* 错误消息数组是非静态的,以便应用程序可以随时访问它们。它必须与错误码的顺序一样 */
const char * const gdbm_errlist[] = {
"No error", "Malloc error", "Block size error", "File open error",
"File write error", "File seek error", "File read error",
"Bad magic number", "Empty database", "Can't be reader", "Can't be writer",
"Reader can't delete", "Reader can't store", "Reader can't reorganize",
"Unknown update", "Item not found", "Reorganize failed", "Cannot replace",
"Illegal data", "Option already set", "Illegal option"
};
#define gdbm_errorcount	((sizeof(gdbm_errlist) / sizeof(gdbm_errlist[0])) - 1)
const char *
gdbm_strerror(error)
gdbm_error error;
{
if(((int)error < 0) || ((int)error > gdbm_errorcount))
{
return("Unknown error");
}
else
{
return(gdbm_errlist[(int)error]);
}
}


(2)int gdm_exists(dbf,key)函数。检查给定的关键字在数据库中是否存在。它只只是简单地调用_gdbm_findkey函数来查找,看是否存在,不做任何其他的包装。

/* gdbmexists.c - 检查给定的关键字在数据库中是否存在 */
#include "autoconf.h"
#include "gdbmdefs.h"
#include "gdbmerrno.h"
/* 本函数在_gdbm_findkey()上没有做任何包装 */
int
gdbm_exists (dbf, key)
gdbm_file_info *dbf;
datum key;
{
char *find_data;	/* 虚设 */
int hash_val;		/* 虚设 */
return (_gdbm_findkey (dbf, key, &find_data, &hash_val) >= 0);
}


(3)int gdbm_fdesc(dbf)函数。返回数据库文件的描述符。

/* gdbfdesc.c - 返回数据库文件的描述符 */
#include "autoconf.h"
#include "gdbmdefs.h"
/* 返回dbf文件的描述符 */
int
gdbm_fdesc(dbf)
gdbm_file_info	*dbf;
{
return (dbf->desc);
}


(4)void gdbm_sync(dbf)函数。对磁盘与其在内存的状态进行同步,例如把没有写完的数据全部写入磁盘。

/* gdbmsync.c - 对磁盘与其在内存的状态进行同步 */
#include "autoconf.h"
#include "gdbmdefs.h"
#include "gdbmerrno.h"
/* 确保数据总是在磁盘上 */
void
gdbm_sync (dbf)
gdbm_file_info *dbf;
{
/* 初始化gdbm_errno变量 */
gdbm_errno = GDBM_NO_ERROR;
/* 在文件上做同步操作 */
fsync (dbf->desc);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: