嵌入式linux之go语言开发(八)存储模块的封装(一)

简介: 嵌入式linux之go语言开发(八)存储模块的封装(一)

在嵌入式终端设备上,免不了要存储记录、上传记录、查看记录等操作。


我称之为储存模块。怎样的操作接口,最好用?最方便?


首先想到的是使用嵌入式数据库sqllite,没错,选他作为存储媒介,用go调用也是很方便的。


但是,这还远远不够。原生的sql操作,若不做个封装,将会是很难用。


另外,已经有很多ORM框架,即对象关系映射,将面向对象语言程序中的对象自动持久化到关系数据库中,就满足要求了吗?


这也还不够。


我想要的接口,能满足这样的功能:


可以写入记录,删除记录,查询记录。


删除记录不是真正的删除,而是清除上传标记,即该记录还存在,只是表示一上传过,没用了,可以被覆盖。


记录数量达到一定条数时要从头循环覆盖。


记录可支持同时向不同的第三方平台上送。


操作记录接口要简单和灵活,比如添加记录中的字段不能再去动表结构。


这些,假如只用ORM框架,操作起来还是不够简单。


以往用c操作flash,完成记录的操作,我们有一整套好用的接口。确实很好用,很简单。


如下:


//===============================>> 记录文件操作
extern U32 APP_Create_RecFile( U32 id, U32 rp, U32 mode );    //创建记录文件
extern U32 APP_Open_RecFile( U32 id );              //打开记录文件
extern U32 APP_Read_RecFile_NotServer( U32 id, U32 rp, U32 sn, U08 *buf );
                                //读取一条记录  顺序读取第SN条未上传的记录
extern U32 APP_Read_RecFile_WriteNot( U32 id, U32 sn, U08 *buf );
                                //读取一条记录  倒数读取第SN条写入的记录
extern U32 APP_Read_RecFile_PHY( U32 id, U32 sn, U08 *buf );  //读取一条记录  读取第SN条记录,按编码位置读取
extern U32 APP_Write_RecFile( U32 id, U08 *buf );       //追加写入一条记录
extern U32 APP_Delete_RecFile( U32 id, U32 rp, U08 *buf, U32 recnum );
                                //删除多条记录
extern U32 APP_Get_RecFileNum( U32 id, U32 rp, U32 *num );    //获取未上传的记录数           
extern U32 APP_Get_RecFileNO( U32 id, U32 *phyno, U32 *no );  //获取最后一条记录流水号
extern U32 APP_Get_RecFileStat( U32 id, U32 *sta );       //获取记录文件状态
extern U32 APP_Set_RecReadp( U32 id, U32 outrp, U32 inrp );   //记录多指针处理


这套接口有多好用?


比如,系统初始化时,去调用APP_Create_RecFile(记录区编号,重传指针,是否初始化内容为0)


去完成初始化的操作。假如有3个记录区,则分别是:


APP_Create_RecFile(1,1,0)


APP_Create_RecFile(2,1,0)


APP_Create_RecFile(3,1,0)


创建了三个记录区。相当于三个表。


写记录就调用APP_Create_RecFile(),至于记录的内容,只要为byte[]数组,想写什么就写什么。


读记录则调用APP_Read_RecFile_NotServer(),自动读取的就是未上传的记录,根据传的sn,可获取未上送的记录1,2...


上送一条就删除一条记录,则调用APP_Delete_RecFile(),并不是真正的删除,而是清除上传标记。实际记录还在。更安全。


写入记录也很简单,直接调用 APP_Write_RecFile( U32 id, U08 *buf )即可。需要写入的内容,组织好buf即可。写入哪个区(表),由ID这个参数指定。


那么计划把这一一列的接口,用go语言去实现。内部使用sqllite和protobuf。


暂时想到的是,封装一系列的操作记录的接口。使用sqllite,使用protobuf作为记录的结构定义。


把protobuf序列化后的二进制数据存储到表里。这样,如果记录的字段变化,只更新序列化后的二进制数据。


不动表结构。


。。。。。。


未完,改天继续


相关文章
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
5709 77
|
Ubuntu 搜索推荐 Linux
详解Ubuntu的strings与grep命令:Linux开发的实用工具。
这就是Ubuntu中的strings和grep命令,透明且强大。我希望你喜欢这个神奇的世界,并能在你的Linux开发旅程上,通过它们找到你的方向。记住,你的电脑是你的舞台,在上面你可以做任何你想做的事,只要你敢于尝试。
596 32
|
存储 网络协议 Linux
【Linux】进程IO|系统调用|open|write|文件描述符fd|封装|理解一切皆文件
本文详细介绍了Linux中的进程IO与系统调用,包括 `open`、`write`、`read`和 `close`函数及其用法,解释了文件描述符(fd)的概念,并深入探讨了Linux中的“一切皆文件”思想。这种设计极大地简化了系统编程,使得处理不同类型的IO设备变得更加一致和简单。通过本文的学习,您应该能够更好地理解和应用Linux中的进程IO操作,提高系统编程的效率和能力。
761 34
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
954 15
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
812 13
|
Linux API 开发工具
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
ijkplayer是由B站研发的移动端播放器,基于FFmpeg 3.4,支持Android和iOS。其源码托管于GitHub,截至2024年9月15日,获得了3.24万星标和0.81万分支,尽管已停止更新6年。本文档介绍了如何在Linux环境下编译ijkplayer的so库,以便在较新的开发环境中使用。首先需安装编译工具并调整/tmp分区大小,接着下载并安装Android SDK和NDK,最后下载ijkplayer源码并编译。详细步骤包括环境准备、工具安装及库编译等。更多FFmpeg开发知识可参考相关书籍。
980 0
FFmpeg开发笔记(五十九)Linux编译ijkplayer的Android平台so库
|
10月前
|
Linux 应用服务中间件 Shell
二、Linux文本处理与文件操作核心命令
熟悉了Linux的基本“行走”后,就该拿起真正的“工具”干活了。用grep这个“放大镜”在文件里搜索内容,用find这个“探测器”在系统中寻找文件,再用tar把东西打包带走。最关键的是要学会使用管道符|,它像一条流水线,能把这些命令串联起来,让简单工具组合出强大的功能,比如 ps -ef | grep 'nginx' 就能快速找出nginx进程。
1032 1
二、Linux文本处理与文件操作核心命令
|
10月前
|
Linux
linux命令—stat
`stat` 是 Linux 系统中用于查看文件或文件系统详细状态信息的命令。相比 `ls -l`,它提供更全面的信息,包括文件大小、权限、所有者、时间戳(最后访问、修改、状态变更时间)、inode 号、设备信息等。其常用选项包括 `-f` 查看文件系统状态、`-t` 以简洁格式输出、`-L` 跟踪符号链接,以及 `-c` 或 `--format` 自定义输出格式。通过这些选项,用户可以灵活获取所需信息,适用于系统调试、权限检查、磁盘管理等场景。
680 137
|
10月前
|
安全 Ubuntu Unix
一、初识 Linux 与基本命令
玩转Linux命令行,就像探索一座新城市。首先要熟悉它的“地图”,也就是/根目录下/etc(放配置)、/home(住家)这些核心区域。然后掌握几个“生存口令”:用ls看周围,cd去别处,mkdir建新房,cp/mv搬东西,再用cat或tail看文件内容。最后,别忘了随时按Tab键,它能帮你自动补全命令和路径,是提高效率的第一神器。
1637 58
|
9月前
|
存储 安全 Linux
Linux卡在emergency mode怎么办?xfs_repair 命令轻松解决
Linux虚拟机遇紧急模式?别慌!多因磁盘挂载失败。本文教你通过日志定位问题,用`xfs_repair`等工具修复文件系统,三步快速恢复。掌握查日志、修磁盘、验重启,轻松应对紧急模式,保障系统稳定运行。
1517 2