半夜来一发C语言gdbm数据库基本操作

2024-06-07 13:18

本文主要是介绍半夜来一发C语言gdbm数据库基本操作,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

看到linux程序设计第317 of 819的数据库程序,手痒啊。赶紧锻炼下小脑,敲个效果看看。附带关键代码注释。

#include<unistd.h>
#include<stdlib.h>
#include<stdio.h>
#include<fcntl.h>#include<gdbm-ndbm.h>#include<string.h>#define TEST_DB_FILE "/tmp/dbm1_test"
#define ITEMS_USED 3struct 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);}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++) {  //这个奇葩的部分就是以每个字段的第一个字节作为一条记录的识别,之后fetch就以这个记号作为一个标准来找到对应的记录。(特指下面的key_datum)sprintf(key_to_use, "%c%c%d", //想想觉得难怪C快呢,这个应该就是数据库的最底层思路items_to_store[i].misc_chars[0],items_to_store[i].more_chars[0],items_to_store[i].any_integer);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);  
//如果设置为DBM_REPLACE那么录入相同记录的时候,数据库会执行overwrite然后return 0。如果设置为DBM_INSERT,遇到相同记录,系统跳出return 1。
//然后这个data_datum帮助记录了这个结构体指针的初始位置和这个结构体的Size。if (result != 0) {fprintf(stderr, "dbm_store failed on key %s\n", key_to_use);exit(2);}}sprintf(key_to_use, "bu%d",13);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);
}


这篇关于半夜来一发C语言gdbm数据库基本操作的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1039280

相关文章

Java实现数据库图片上传功能详解

《Java实现数据库图片上传功能详解》这篇文章主要为大家详细介绍了如何使用Java实现数据库图片上传功能,包含从数据库拿图片传递前端渲染,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、数据库搭建&nbsChina编程p; 3、后端实现将图片存储进数据库4、后端实现从数据库取出图片给前端5、前端拿到

IDEA连接达梦数据库的详细配置指南

《IDEA连接达梦数据库的详细配置指南》达梦数据库(DMDatabase)作为国产关系型数据库的代表,广泛应用于企业级系统开发,本文将详细介绍如何在IntelliJIDEA中配置并连接达梦数据库,助力... 目录准备工作1. 下载达梦JDBC驱动配置步骤1. 将驱动添加到IDEA2. 创建数据库连接连接参数

Jmeter如何向数据库批量插入数据

《Jmeter如何向数据库批量插入数据》:本文主要介绍Jmeter如何向数据库批量插入数据方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Jmeter向数据库批量插入数据Jmeter向mysql数据库中插入数据的入门操作接下来做一下各个元件的配置总结Jmete

MySql中的数据库连接池详解

《MySql中的数据库连接池详解》:本文主要介绍MySql中的数据库连接池方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql数据库连接池1、概念2、为什么会出现数据库连接池3、原理4、数据库连接池的提供商5、DataSource数据源6、DBCP7、C

StarRocks数据库详解(什么是StarRocks)

《StarRocks数据库详解(什么是StarRocks)》StarRocks是一个高性能的全场景MPP数据库,支持多种数据导入导出方式,包括Spark、Flink、Hadoop等,它采用分布式架构,... 目录StarRocks介绍什么是StarRocks?StarRocks适合什么场景?StarRock

Windows环境下安装达梦数据库的完整步骤

《Windows环境下安装达梦数据库的完整步骤》达梦数据库的安装大致分为Windows和Linux版本,本文将以dm8企业版Windows_64位环境为例,为大家介绍一下达梦数据库的具体安装步骤吧... 目录环境介绍1 下载解压安装包2 根据安装手册安装2.1 选择语言 时区2.2 安装向导2.3 接受协议

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)

《SpringBoot使用Jasypt对YML文件配置内容加密的方法(数据库密码加密)》本文介绍了如何在SpringBoot项目中使用Jasypt对application.yml文件中的敏感信息(如数... 目录SpringBoot使用Jasypt对YML文件配置内容进行加密(例:数据库密码加密)前言一、J

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

Python调用Orator ORM进行数据库操作

《Python调用OratorORM进行数据库操作》OratorORM是一个功能丰富且灵活的PythonORM库,旨在简化数据库操作,它支持多种数据库并提供了简洁且直观的API,下面我们就... 目录Orator ORM 主要特点安装使用示例总结Orator ORM 是一个功能丰富且灵活的 python O