dbm数据库源代码分析(11):gdbmerrno.c、gdbmexists.c、gdbmfdesc.c和gdbmsync.c
2016-07-29 00:00
316 查看
(1)const char* gdbm_strerror(error)函数。将错误码转换成错误消息字符串。
(2)int gdm_exists(dbf,key)函数。检查给定的关键字在数据库中是否存在。它只只是简单地调用_gdbm_findkey函数来查找,看是否存在,不做任何其他的包装。
(3)int gdbm_fdesc(dbf)函数。返回数据库文件的描述符。
(4)void gdbm_sync(dbf)函数。对磁盘与其在内存的状态进行同步,例如把没有写完的数据全部写入磁盘。
/* 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); }
相关文章推荐
- SQLite剖析(8):原子提交原理
- MySQL在大型网站的应用架构演变
- NoSQL数据库面面观
- Oracle官方并发教程(1)
- MySQL在大型网站的应用架构演变
- NoSQL数据库面面观
- Oracle官方并发教程(1)
- dbm数据库源代码分析(16):测试程序和转换程序
- 开源软件架构:NoSQL生态系统
- dbm数据库源代码分析(16):测试程序和转换程序
- 开源软件架构:NoSQL生态系统
- ibatis映射文件中 sqlMap 节点 namespace 属性含义
- WTF, MS JDBC Driver for SQL Server 2008
- WTF, MS JDBC Driver for SQL Server 2008
- tomcat8 nginx负载均衡 + 动静资源分离, 利用redis 共享 session
- nginx-tomcat负载均衡redis-session共享,静态资源分离
- linux下安装redis数据库
- MongoDB常用操作命令大全
- realmysql 配套书 资料
- 用SQL语句创建表