20(数据库函数库)

1 常用函数

#include "apue_db.h"
//打开数据库
DBHANDLE db_open(const char *pathname, int oflag, ... /* int mode */);
        Returns: database handle if OK, NULL on error

//关闭数据库
void db_close(DBHANDLE db);

//当向数据库加入一条新的纪录时,必须指明此记录的键以及和此键相关联的数据。
int db_store(DBHANDLE db, const char *key, const char *data, int flag);
        Returns: 0 if OK, nonzero on error (see following)
        //参数key和data是由null结束的字符串。
        //flag参数只能是DB_INSERT、DB_REPLACE、DB_STORE(加入或者替换,只要合适无论哪一种都可以)。

//通过提供key可以取记录
#include "apue_db.h"
char *db_fetch(DBHANDLE db, const char *key);
            Returns: pointer to data if OK, NULL if record not found

//通过提供key可以删除记录
#include "apue_db.h"
int db_delete(DBHANDLE db, const char *key);
            Returns: 0 if OK, 1 if record not found

//先调用db_rewind回滚到数据库的第一条记录,然后在每一次循环中调用db_nextrec顺序读每一条记录
void db_rewind(DBHANDLE db);
char *db_nextrec(DBHANDLE db, char *key);
        Returns: pointer to data if OK, NULL on end of file
        //db_nextrec不保证访问次序,只保证每条记录被恰好访问一次。

Figure 20.3. Create a database and write three records to it

#include "apue.h"
#include "apue_db.h"
#include <fcntl.h>
int main(void)
{
    DBHANDLE    db;

    if ((db = db_open("db4", O_RDWR | O_CREAT | O_TRUNC, FILE_MODE)) == NULL)
        err_sys("db_open error");

    if (db_store(db, "Alpha", "data1", DB_INSERT) != 0)
        err_quit("db_store error for alpha");
    if (db_store(db, "beta", "Data for beta", DB_INSERT) != 0)
        err_quit("db_store error for beta");
    if (db_store(db, "gamma", "record3", DB_INSERT) != 0)
        err_quit("db_store error for gamma");

    db_close(db);
    exit(0);
}

2 集中式或非集中式

(1)集中式
由一个进程作为数据库管理者,所有的数据库访问工作由此进程完成。其他进程通过IPC机制与此中心进行联系
(2)非集中式
每个库独立申请并发控制(加锁),然后自己调用IO函数
20(数据库函数库)_第1张图片

你可能感兴趣的:(20(数据库函数库))