• 数据管理(七)


    其他的dbm函数

    现在我们已经看到基本的dbm函数,我们可以简要的介绍一下dbm所使用的其他的函数:

    int dbm_delete(DBM *database_descriptor, datum key);
    int dbm_error(DBM *database_descriptor);
    int dbm_clearerr(DBM *database_descriptor);
    datum dbm_firstkey(DBM *database_descriptor);
    datum dbm_nextkey(DBM *database_descriptor);

    dbm_delete

    dbm_delete函数用于由数据库中删除记录。与dbm_fetch类似,他也需要一个datum参数,所不同的是他并不是读取数据,而是删除数据。如果成功,则会返回0。

    dbm_error

    dbm_error函数只是简单的测试在数据库中是否发生了错误,如果没有错误则会返回0。

    dbm_clearerr

    dbm_clearerr函数清除在数据库中所设置的错误条件标记。

    dbm_firstkey与dbm_nextkey

    这两个函数用作一个函数对用于在数据库中的所有项目的键值中进行搜索。所需要循环结构如下:

    DBM *db_ptr;
    datum key;
    for(key = dbm_firstkey(db_ptr); key.dptr; key = dbm_nextkey(db_ptr));

    试验--读取与删除数据

    现在我们使用这些新函数来修改dbm1.c程序,得到dbm2.c程序:

    1 复制dbm1.c文件,进行编辑。编辑#define TEST_DB_FILE行:

    #include <unistd.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <fcntl.h>
    #include <ndbm.h>
    #include <string.h>
    #define TEST_DB_FILE “/tmp/dbm2_test”
    #define ITEMS_USED 3

    2 然后我们需要改变的只是读取部分:

        /* now try to delete some data */
    sprintf(key_to_use, “bu%d”, 13);
    key_datum.dptr = key_to_use;
    key_datum.dsize = strlen(key_to_use);
    if (dbm_delete(dbm_ptr, key_datum) == 0) {
        printf(“Data with key %s deleted/n”, key_to_use);
    }
    else {
        printf(“Nothing deleted for key %s/n”, key_to_use);
    }
    for (key_datum = dbm_firstkey(dbm_ptr);
           key_datum.dptr;
           key_datum = dbm_nextkey(dbm_ptr)) {
        data_datum = dbm_fetch(dbm_ptr, key_datum);
        if (data_datum.dptr) {
            printf(“Data retrieved/n”);
            memcpy(&item_retrieved, data_datum.dptr, data_datum.dsize);
            printf(“Retrieved item - %s %d %s/n”,
                   item_retrieved.misc_chars,
                   item_retrieved.any_integer,
                   item_retrieved.more_chars);
        }
        else {
            printf(“No data found for key %s/n”, key_to_use);
        }
    }

    其输出结果如下:

    $ ./dbm2
    Data with key bu13 deleted
    Data retrieved
    Retrieved item - Third 3 baz
    Data retrieved
    Retrieved item - First! 47 foo

    工作原理

    这个程序的前面部分与前面的例子相同,只是简单的在数据库中存储数据。然后我们构建一个键值来匹配第二个项目,并且将其由数据库中删除。

    程序然后使用dbm_firstkey与dbm_nextkey按顺序访问数据库中的每一个键值,读取数据。注意,数据并不是按顺序读取的:不存在按键值顺序实现的检索顺序;他只是遍历所有记录的一个简单方法。


  • 相关阅读:
    linux开发中常用的命令及技巧(连载)
    使用CCS调试基于AM335X的SPL、Uboot(原创)
    [C语言]变量的声明和定义有什么区别
    C语言中void*详解及应用
    使用中断处理程序实现loop功能
    原码,反码,补码的深入理解与原理
    关于C和C++不同源文件中重名变量的问题(转)
    const extern static 终极指南(转)
    函数调用栈分析
    16位和32位的80X86汇编语言的区别(转)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/2461968.html
Copyright © 2020-2023  润新知