Ubuntu版本:ubuntu-gnome-16.04-desktop-amd64,gnome版

-----------------------------------------------------------------------------------

dmb是一个轻量级的数据库,但是不是标准的数据库,纯粹以二进制存储的一种数据库,常用于系统底层的数据库,在其他一些很少更新内容的地方也可以使用,查询和取出速度非常快但是存入或修改通常较慢,也可以理解,因为不像别的数据库,给每个字段都规定了大小,给每条记录都留下了相同大小的空间,那么后来怎么修改都只是改数据库文件的一小块,而dbm如果修改了记录就只能将整个文件更新。

1. dbm安装

sudo apt-get install libgdbm-dev

2. 编译

1)源文件中包含头文件:gdbm-ndbm.h

2)gcc dbm.c -I/usr/include/gdbm -lgdbm_compat -lgdbm

注:不同的Linux发行版本,头文件以及编译方式不一致

3. 源码: dbm.c

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <fcntl.h>//#include <ndbm.h>
// On some systems you need to replace the above with
#include <gdbm-ndbm.h>#include <string.h>#define TEST_DB_FILE "/tmp/dbm1_test"
#define ITEMS_USED 3/* A struct to use to test dbm */
struct test_data {char misc_chars[15];int  any_integer;char more_chars[21];
};int main() {struct test_data items_to_store[ITEMS_USED];struct test_data item_retrieved;char key_to_use[20];int i, result;datum key_datum;datum data_datum;DBM *dbm_ptr;dbm_ptr = dbm_open(TEST_DB_FILE, O_RDWR | O_CREAT, 0666);if (!dbm_ptr) {fprintf(stderr, "Failed to open database\n");exit(EXIT_FAILURE);}/* put some data in the structures */memset(items_to_store, '\0', sizeof(items_to_store));strcpy(items_to_store[0].misc_chars, "First!");items_to_store[0].any_integer = 47;strcpy(items_to_store[0].more_chars, "foo");strcpy(items_to_store[1].misc_chars, "bar");items_to_store[1].any_integer = 13;strcpy(items_to_store[1].more_chars, "unlucky?");strcpy(items_to_store[2].misc_chars, "Third");items_to_store[2].any_integer = 3;strcpy(items_to_store[2].more_chars, "baz");for (i = 0; i < ITEMS_USED; i++) {/* build a key to use */sprintf(key_to_use, "%c%c%d",items_to_store[i].misc_chars[0],items_to_store[i].more_chars[0],items_to_store[i].any_integer);/* build the key datum strcture */key_datum.dptr = (void *)key_to_use;key_datum.dsize = strlen(key_to_use);data_datum.dptr = (void *)&items_to_store[i];data_datum.dsize = sizeof(struct test_data);result = dbm_store(dbm_ptr, key_datum, data_datum, DBM_REPLACE);if (result != 0) {fprintf(stderr, "dbm_store failed on key %s\n", key_to_use);exit(2);}} /* for *//* now try and retrieve some data */sprintf(key_to_use, "bu%d", 13); /* this is the key for the second item */key_datum.dptr = key_to_use;key_datum.dsize = strlen(key_to_use);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);}dbm_close(dbm_ptr);exit(EXIT_SUCCESS);
}

Linux dbm轻量级数据库介绍与使用相关推荐

  1. Linux下常用数据库介绍

    一.数据库介绍 1.什么是数据库:        数据库就是一个存放计算机数据的仓库,这个仓库是按照一定的数据结构(数据结构是指数据的组 织形式或数据之间的联系)来对数据进行组织和存储的,可以通过数据 ...

  2. Linux下轻量级数据库-SQLite3(嵌入式设备)

    一.概念 数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效.数据库对数据的管理的基本单位是表(table). 二.常见的数据库 大型数据库(大型机) ------ Oracle( ...

  3. linux维护rpm 数据库,Linux运维知识之linux rpm命令详细介绍

    本文主要向大家介绍了Linux运维知识之linux rpm命令详细介绍,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. 虽然现在N多人都使用yum去替代rpm了,但是rpm在一些 ...

  4. linux下pfam使用方法,pfam数据库介绍及使用

    一个基因转录的蛋白质分子中可以包含多个结构特异并且功能不同的区域,这些区域称之为domain,domain 可以看作蛋白质功能的基本单位,蛋白质的功能由包含的多个domain共同决定,研究domain ...

  5. Linux下Mysql数据库的基础操作

    Linux下Mysql数据库的基础操作 一.Mysql数据介绍 二.数据库相关术语介绍 1.数据库相关名词 2.相关术语介绍 三.Mysql数据库的管理 1.创建数据库用户 2.查询用户状态 3.修改 ...

  6. Linux虚拟机sqlite数据库安装教程、命令实现sqlite

    参考:Linux虚拟机sqlite数据库安装教程 作者:图触靓 发布时间: 2021-04-08 19:07:56 网址:https://blog.csdn.net/bhbhhyg/article/d ...

  7. 数据简化社区2018年全球数据库总结及18种主流数据库介绍(公号回复“数据库2018”下载典藏版PDF报告)

    数据简化社区2018年全球数据库总结及18种主流数据库介绍(公号回复"数据库2018"下载典藏版PDF报告) 秦陇纪 数据简化DataSimp 今天 数据简化DataSimp导读: ...

  8. SQLite数据库介绍与使用

    SQLite数据库介绍与使用 概述 SQLite是一个轻量级.跨平台的关系型数据库.SQLite的很小,它的数据库就是一个文件,但是它并不缺乏功能.不需要复杂的安装或管理.SQLite事务是完全兼容A ...

  9. 小型mysql_小型数据库的选择(轻量级数据库)(转)

    小型数据库的选择(轻量级数据库) 一直使用Sql Server开发,没有用过Access之外其它的DB.最近正想做个小型工具,这种小东西当然不可能用Sql Server数据库啦,可又不想用Access ...

最新文章

  1. 汇总下几个IP计算/转换的shell小脚本-转
  2. 根据12和24小时制选择不同的时间显示
  3. Mybatis自动生成实体类等代码
  4. HeartBeat?你到底要干什么!
  5. 【PHP】xampp配置多个监听端口和不同的网站目录(转)
  6. 使用基本身份验证来保护Spring Boot REST API
  7. anaconda 怎么安装xlrd_Pyinstaller打包,文件太大了怎么办?
  8. Jeewx-Enterprise_1.1版本发布,开源微信企业号开发平台
  9. Python工作笔记004---python字符串前面加上'r'的作用_u_b的含义
  10. Linux---线程安全
  11. python水仙花数的编程讲解_《scratch编程+数学》课程:找寻水仙花数
  12. 搜索框+ 定时器+Bug解决
  13. 开启MyBatis(二)创建工程
  14. 大一java计算圆面积_Java练习题——计算圆的面积
  15. stm32 火灾自动报警及联动控制源码_火灾自动报警系统设计规范 :联动控制
  16. 终于结束漂泊的身份-我办理北京人才引进的经历
  17. 五款堪称神奇的手机APP 一定不要错过了
  18. Sprite Kit 移动精灵
  19. html用九张图片做出九宫图,九宫切图软件 如何快速把照片做成九宫格切图
  20. Python 路径操作

热门文章

  1. ux.form.field.Verify 验证码控件
  2. 我的Python成长之路---第一天---Python基础(5)---2015年12月26日(雾霾)
  3. HTML5系列:HTML5与HTML4的区别
  4. 在Exchange 2010中批量导入用户
  5. oracle clob 回车换行问题
  6. 布尔运算_利用布尔运算拆分汉字
  7. Greg and Array CodeForces - 296C(差分数组+线段树)
  8. linux函数输入,go编程输入函数
  9. android 引用路径,android – ClassLoader引用了未知路径:/ data...
  10. php及时提醒反馈,php,实时交互_请问PHP脚本执行时如何实时提供反馈,php,实时交互 - phpStudy...