内核开发中,大多是面向对象的思想
本来想仿照内核,抽象出一个驱动加载初始化,用C++ 实现,后来发现,底层逻辑还是有点乱, 读写二级制部分,设备树部分,使用json 文本替代, 分析节点描述使用,但是这个封装,还勉强可用,传参,分析都已解决.platform gpio char dev 这个的逻辑关系还得在顺一下

#include "cJSON.h"
#include "cJSON_Utils.h"
#include <iostream>
#include <string>
#include <fstream>
#include <fcntl.h>
#include <sys/stat.h>
#include <typeinfo>class file_attr{public:const char* name;file_attr(const char*n):name(n){}int32_t size(){struct stat fs;stat(name,&fs);return fs.st_size;}
};class json: private file_attr{public:json(const char* n);void print();void find(const char* node,std::string& value);void find(const char* node,int& value);void find(const char* node,const char* subnode,std::string& value);void find(const char* node,const char* subnode,int& value);~json();
private:cJSON* root;FILE* fp;char* buffer;
};json::json(const char* n): file_attr(n){fp = fopen(name,"r");buffer = new char(this->size());fread(buffer,this->size(),1,fp);root = cJSON_Parse(buffer);
}json::~json() {delete[] buffer;buffer = nullptr;cJSON_free(root);fclose(fp);
}void json::print() {std::cout << buffer << std::endl;
}void json::find(const char *node, std::string & value) {cJSON* ptr = cJSON_GetObjectItem(root,node);if(ptr != nullptr){value = std::string(ptr->valuestring);}
}void json::find(const char *node, int & value) {cJSON* ptr = cJSON_GetObjectItem(root,node);if(ptr != nullptr){value = ptr->valueint;}
}void json::find(const char *node, const char *subnode, std::string &value) {cJSON* ptr = cJSON_GetObjectItem(root,node);if(ptr != nullptr) {cJSON *sub_ptr = cJSON_GetObjectItem(ptr, subnode);if(sub_ptr != nullptr)value = std::string(sub_ptr->valuestring);}
}void json::find(const char *node, const char *subnode, int &value) {cJSON* ptr = cJSON_GetObjectItem(root,node);if(ptr != nullptr) {cJSON *sub_ptr = cJSON_GetObjectItem(ptr, subnode);if(sub_ptr != nullptr)value = sub_ptr->valueint;}
}

cplus cjson 封装相关推荐

  1. 【C】cJSON使用以及在stm32中的应用

    1. cJSON使用 最近一段时间在整理自己进入研究生阶段后学习过程中的一些内容,之前在进行相关代码调试过程中,也的确耗费了比较大的精力去搜寻资料,然后整合代码到自己所需要的系统中,如在stm32中使 ...

  2. 计算机笔记--【Redis高级】

    提示:本文章的内容来源于自己所学的一些知识以及网络 文章目录 一.分布式缓存 1.Redis持久化 1.1.RDB持久化(存数据) 1.1.1.执行时机 1.1.2.RDB原理 1.1.3.小结 1. ...

  3. Linux网络编程之获取网络天气信息

    需求分析:1.需要Linux c 网络编程基础,2.需要了解 http 协议3.需要天气信息相关api(可以从阿里云上购买,很便宜的!)4.需要cJSON解析库(因为获取到的天气信息一般是用cJSON ...

  4. 高级服务框架(黑马)

                  一.修改order-service服务 修改OrderService,让其监听Nacos中的sentinel规则配置. 具体步骤如下: 1.引入依赖 在order-serv ...

  5. Redis高级篇-多级缓存

    Redis高级篇资料下载 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat ...

  6. 03-AliOSThings操作系统开发

    目录 课程目标 AliOS Things操作系统的特点 任务的基本概念 AliOS中的任务 时钟节拍与软件定时器 idle任务钩子的使用 内存管理 • BLK算法原理 内存管理常用函数 信号量 信号量 ...

  7. 黑马Redis笔记高级篇 | 多级缓存

    黑马Redis笔记高级篇 | 多级缓存(黑马教程云服务器踩坑记录) 1.JVM进程缓存(tomcat服务内部) 1.1 导入商品案例 1.2 初识Caffeine 1.3 实现进程缓存 2.Lua语法 ...

  8. SpringCloud补充与微服务面试题

    多级缓存 1.什么是多级缓存 传统的缓存策略一般是请求到达Tomcat后,先查询Redis,如果未命中则查询数据库,如图: 存在下面的问题: •请求要经过Tomcat处理,Tomcat的性能成为整个系 ...

  9. 一文搞定json解析和封装问题,手把手带你学习CJSON开源代码

    cJSON保姆级教程 JSON简介 cJSON介绍 基本使用操作 关键数据结构 设计思想 JSON数据解析 解析步骤 json数据封装 封装步骤 封装示例 使用注意事项 内存及时释放 内存钩子 阅读心 ...

最新文章

  1. [bzoj3143] [HNOI2013]游走
  2. LeetCode686 Repeated String Match(字符串匹配)
  3. springMVC注解@initbinder日期类型的属性自动转换
  4. DrawerLayout侧滑
  5. 教你11 周打造全能Python工程师!
  6. 高考python必考题目_假如高考考python编程,这些题目你会几个呢?
  7. Oracle数据库安装Version12c
  8. jqgrid 编辑列拿不到值_如何在DAX Stadio和Excel中返回表和度量值?
  9. 【转载】什么时候该选C语言实现业务逻辑,什么时候该选Python?
  10. 计算机科学 —— 时间戳(timestamp)
  11. USB免驱摄像头采集图像【VS2012+opencv+directShow(CcameraDS)实现】
  12. android课程设计体重测量仪,数字身高体重测量仪毕业设计样本.docx
  13. 如何取消Word文档的只读模式或者限制编辑
  14. MySQL数据库--韩顺平老师课
  15. [POI 2009]Lyz
  16. 小马哥----高仿苹果6S A236 刷机拆机主板图与开机界面图 更新解锁界面 全网通4G 警惕
  17. 利用简单的爬虫获取CV顶会论文
  18. 为什么要在完成电子邮件后存档(Archive)电子邮件
  19. VSCode嵌入式硬件开发环境设置
  20. CCIE自学-by闫辉NP视频:QoS小结

热门文章

  1. 模板模式(template)解析例子
  2. Sublime注释插件--DocBlockr
  3. 正则表达式表示任意字符
  4. 在拓扑图上做标准ACL和扩展ACL(期末考试)
  5. 理解域信任关系,Active Directory系列之十六
  6. oracle 测试sql执行时间_通过错误的SQL来测试推理SQL的解析过程
  7. c语言结构体如何定义字母,c语言中定义结构体如何定义?
  8. php调用selenium,从php调用python selenium
  9. BigInteger类实例的构造过程——JDK源码解析
  10. linux开机启动遇到grub启动_Linux如何跳过grub启动