DBM与GDBM与跨平台代码研究
关键字:
DBM: UNIX系统的数据库,使用hash保存非结构化数据。它不支持SQL。
GDBM:DBM的GNU版本。
跨平台C语言代码:具有跨平台特性的C语言代码。
1. 简介
符合X/Open技术规范的UNIX版本自备了一个数据库。但这个数据库不符合ANSI标准的SQL技术规范(不支持SQL语句)。它只是一个存储检索数据的例程。
dbm、gdbm适合存储静态的,索引化的数据结构。它在创建数据项时非常慢,但检索数据项时非常快。
本文给出了dbm、gdbm各自的函数简要说明,最后给出了能够兼容DBM、GDBM两个不同数据库的C代码编写建议。
2. dbm
dbm使用两个数据文件,扩展名为”.pag”和”.dir”。但对数据库的操作返回值只有一个。注意:不要使用读写函数直接操作数据文件,应该使用dbm提供的数据操作函数访问数据。
2.1. 数据结构
数据、索引都使用以下结构保存:
typedef struct {
char *dptr;
int dsize;
} datum;
数据库的访问结构(等同于FILE):
typedef struct {int dummy[10];} DBM;
2.2. 函数简介
#include <ndbm.h>
/*打开数据库*/
DBM *dbm_open(const char *filename, /*数据库文件名(两个文件,后缀不同)*/
int file_open_flags, /*与open函数相同,文件打开标志*/
mode_t file_mode /*与open函数相同,文件打开模式*/
);
成功时返回DMB类型指针,失败返回NULL
/*存储数据*/
int dbm_store(DBM *database_descriptor, /*前面打开数据库操作返回的结构*/
datum key, /*检索数据的关键字*/
datum content, /*用于保存数据的结构*/
int store_mode /*<