10.1
概述
openssl实现了一个简单的文本数据库,他可以从文件读取数据和将数据写到文件中,兵切可以根据关键字段来查询数据。
10.2 数据结构
typedef struct txt_db_st {
int num_fields; 表明文本数据库的列数
STACKP_OF(OPENSSL_PSTRING) *data; 用来存放数据,每一行数据组织成为一个字符串数组(每个数组值对应该行的一列),并将此数组地址push到堆栈中。
LHASH_OF(OPENSSL_STRING) **index; 哈希表数组,每一列对应一个哈希表。每一列都可以建哈希表,如果不建哈希表将不能查找改列数据。
int (**qual)(OPENSSL_STRING *);一个函数地址数组,数组的每个元素对应一列,进行插入该别哈希表前的过滤。
long error;
long arg1;
long arg2;
OPENSSL_STRING *arg_row;
}
10.3 函数说明
a.TXT_DB *TXT_DB_read(BIO *in, int num )
功能:用于从BIO中读入数据,转换为TXT_DB,num用于明确指明列数,本函数不建立哈希表
b.long TXT_DB_write(BIO *out, TXT_DB *db)
功能:将TXT_DB内容写入BIO;
c.int TXT_DB_create_index(TXT_DB *db, int field, int (*qual)(char **))
OPENSSL_LH_HASHFUNC hash, OPENSSL_LH_COMPFUNC cmp)
给field指定的列建立哈希表。db为需要建索引的TXT_DB,hash为一行数据的hash 运算回调函数,cmp为一行数据的比较函数。
d.char **TXT_DB_get_by_index(TXT_DB *db, int idx, char **value)
功能:根据关键字段来查询数据,查询结果返回一行数据db为文本数据库,idx表明采用哪一列的哈希表来查找;value为查询条件。
e.int TXT_DB_insert(TXT_DB *db, char **value)
功能:往TXT_DB中插入一行数据。value数组以NULL表示结束。
f.void TXT_DB_free(TXT_DB *db)
功能:清除TXT_DB.