如何获取GDBM数据库的结构

D脚本

调制解调器管理器GUI创建一个名称sms.gdbm为存储所有SMS详细信息的数据库当前,调制解调器管理器GUI不提供简单删除所有已接收/已发送消息的功能。因此,我试图创建一个程序以从数据库(sms.gdbm)中删除这些记录但是首先我想知道sms.gdbm数据库的结构它包含哪些数据库,还有表及其列名。那么,是否有任何CLI或GUI程序来显示*.gdbm文件的结构

约翰·史密斯

通过GDBM API可以读取GDBM数据库。去年我写了一篇关于它的小文章它们基本上是一种存储任何类型的简单键/值对的方法。没有传统DBMS中的“结构”:没有表,没有列...仅键和值。

该API定义了以下功能:

GDBM_FILE gdbm_open (const char *name, int block_size, int flags, int mode, void (*fatal_func)(const char *));
void gdbm_close (GDBM_FILE dbf);

typedef struct {
    char *dptr;
    int dsize;
} datum;

int gdbm_store (GDBM_FILE dbf, datum key, datum content, int flag);
datum gdbm_fetch (GDBM_FILE dbf, datum key);
int gdbm_delete (GDBM_FILE dbf, datum key);
datum gdbm_firstkey (GDBM_FILE dbf);
datum datum gdbm_nextkey (GDBM_FILE dbf, datum prev);

const char * gdbm_strerror (gdbm_error errno);

基本上,您所要做的就是通过API打开文件...

GDBM_FILE database = gdbm_open("sms.gdbm", 512, GDBM_READER, 0, NULL);

并开始阅读:

#include <stdio.h>
#include <stdlib.h>
#include <gdbm.h>

int main(int argc, char** argv)
{
    GDBM_FILE database = gdbm_open("sms.gdbm", 512, GDBM_READER, 0, NULL);

    datum key, data;
    for(key = gdbm_firstkey(database); /* get the first key */
        key.dptr != NULL; /* keep going until the end */
        key = gdbm_nextkey(database, key)) /* next key */
    {
        /* fetch data associated to key */
        data = gdbm_fetch(database, key);
        if(data.dptr != NULL)
            printf("Entry found (%d bytes) : %s.\n", data.dsize, data.dptr);
    }

    gdbm_close(database);
    return EXIT_SUCCESS;
}

注意,不确定存储在数据库中的数据类型。在这里,我假设会有字符串,但是可以是任何东西数据以二进制形式存储,唯一可以确定的是大小(data.dsize)。该API将为您提供指向数据开头的指针(data.dptr),但是如何处理它取决于您(或者至少取决于您的Modem Manager GUI)。

找到要删除的条目后,只需致电gdbm_delete

gdbm_delete(database, key);

并且不要忘记在完成后关闭所有内容;)

gdbm_close(database);

我不知道已经有任何GDBM读取器程序可用,但是编写一个并不需要太多的努力。不要忘了包括GDBM标头(gdbm.h)并在编译时链接库:

gcc reader.c -o reader -lgdbm

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

数据库结构

来自分类Dev

数据库结构

来自分类Dev

数据库结构

来自分类Dev

在sqlite中以树状结构从数据库中获取数据

来自分类Dev

如何从Firebase数据库获取数据

来自分类Dev

如何从数据库中获取数据?

来自分类Dev

Yii如何从数据库获取数据

来自分类Dev

如何从数据库获取数据

来自分类Dev

如何从数据库获取解密的数据?

来自分类Dev

如何从数据库获取JSON数据?

来自分类Dev

如何获取数据库的内容数据?

来自分类Dev

如何从以下实时数据库结构中获取检索项?

来自分类Dev

Perl-使用DBI获取sqlite数据库的结构

来自分类Dev

在数据库中存储和获取json结构

来自分类Dev

如何从数据库Firebase获取值

来自分类Dev

如何从Firebase数据库获取密钥?

来自分类Dev

QCompleter,如何从数据库获取ID

来自分类Dev

Firebase数据库结构

来自分类Dev

Firebase 数据库结构

来自分类Dev

如何从现有数据库结构生成模型

来自分类Dev

如何从sql数据库检索表结构?

来自分类Dev

我如何设计MSSQL数据库结构?

来自分类Dev

如何为MySQL创建数据库目录结构?

来自分类Dev

如何使用 SQL 数据库生成结构良好的 PDF?

来自分类Dev

如何获取数据库中的数据数据

来自分类Dev

如何使用游标从具有相同表结构的不同数据库中获取Select语句的结果集

来自分类Dev

IndexDB数据库/对象库的结构

来自分类Dev

如何从MySQL数据库获取特定数据?

来自分类Dev

如何从现有的MongoDB数据库获取数据?