zlogzlog是一个纯C日志函数库,具有高可靠性、高性能、线程安全、灵活、概念清晰的特点。 zlog在效率、功能和安全性方面明显优于log4c,并且是用C语言编写的,具有相对更强的通用性。 zlog具有以下特点:
syslog分类模型比log4j模型更直接,并且自定义日志格式会导致多种输出,包括动态文件、静态文件、stdout、stderr、syslog和用户定义的输出函数。运行时的手动和自动更新配置可提供高性能(同时确保安全性),比syslog(3) 和rsyslogd 组合快大约1000 倍。在多线程和多进程环境中准确的文件传输就像每微秒调用包装器dzlog 一样简单(程序默认只使用一个类别)。 MDC 是线程的键值对表,可以使用用户定义的字段进行自扩展。只要你在POSIX 系统上(当然需要兼容C99 的vsnprintf),zlog 仓库链接:
https://github.com/HardySimpson/zlog
zlog用户手册:
http://hardysimpson.github.io/zlog/UsersGuide-CN.html
测试.c:
#include #include 'zlog.h'int main(int argc, char** argv){ int rc; if (rc) { printf('初始化失败\) n');值-1; } zc=zlog_get_category('my_cat'); zlog_info(zc, '你好,zlog'); }test.conf:
xmakexmake是一个跨平台的安装(编译)工具。 xmake是一个基于Lua的轻量级跨平台构建工具。它是使用xmake.lua维护项目构建的,与makefile/CMakeLists.txt相比,具有更简洁直观的配置语法,即使对于初学者来说也更容易使用。快速启动可以让用户专注于实际的项目开发。 xmake官网:
https://xmake.io/
1. 支持平台: Windows (x86, x64) macOS (i386, x86_64, arm64) Linux (i386, x86_64, cross toolchain.) *BSD (i386, x86_64) Android (x86, x86_64,armeabi,armeabi-v7a,arm64 -v8a)iOS(armv7,armv7s,arm64,i386,x86_64)WatchOS(armv7k,i386)MSYS(i386,x86_64)MinGW(i386,x86_64,arm,arm64)Cygwin(i386,x86_64)Wasm(wasm32)Cross(交叉)工具链.) 2. 支持的工具链3. 支持的语言C/C++Objc/Objc++SwiftAssemblyGolangRustDlangFortranCudaZig (实验) 4. 编译测试多任务并行编译测试:
单任务编译测试:
官网内容非常丰富,感兴趣的朋友已经详细讲解了xmake。
gear-libgear-lib是一组通用的C基础库。
全部用POSIX C 实现,目标是实现与Linux、Windows、Android 和iOS 的跨平台兼容性。适用于物联网、嵌入式、网络服务开发等场景。这包括:
gear-lib非常好用,可以作为日常开发中的工具库。齿轮库地址:
https://github.com/gozfree/gear-lib
inihinih 是一个用C 语言编写的INI 文件解析器。 ini 文件是初始化文件的缩写。 INI 文件由节、键和值组成,注释由分号(;) 表示。
[ip] ;Section1ip_addr=192.168.1.103[test];Section2name=ChengNnum=66 #include #include #include 'ini.h'typedef struct{ const char* ip_addr;} 配置; const char* 节, const char* 名称, const char* 值){配置* pconfig=(配置*)user; #define MATCH(s, n) strcmp(section, s)==0 strcmp(name, n)==0 if (MATCH('ip', 'ip_addr')) { pconfig-ip_addr=strdup(value) } else if (MATCH('test', 'name')) { pconfig -name=strdup(value); } else if (MATCH('test', 'num')) { pconfig-num=atoi(value); } else { return 0; return 1;}int main(int argc, char* argv[]){ 配置config ; config.ip_addr=NULL; /* 设置默认值*/config.num=0;ini', 处理程序, 配置) 0) { printf(''无法加载``ip.ini''\n'); printf(''从``ip.ini': 加载ip_addr=%s, name=%s, num=%d\n', config.ip_addr, config.name, config.num) if (config.ip_addr ); free((void*)config.ip_addr); if (config.name) (void*)config.name); return 0;}queuequeue.h 对于Linux 和FreeBSD 来说是一个非常有用的头文件。该头文件充满了宏定义操作,因此不仅可以在Linux/嵌入式Linux项目中使用,还可以在单片机项目中使用。使用宏实现以下数据结构。
SLIST:单向无尾链表LIST:双向无尾链表STAILQ:单向无尾链表(可用作队列) TAILQ:双向无尾链表(可用作队列) 所有数据结构支持以下功能:
在链表的开头插入一个节点。 删除一个节点。该头文件位于Linux 系统上的以下路径:
/usr/include/sys/queue.h
您也可以从以下网址查看:
https://code.woboq.org/userspace/glibc/misc/sys/queue.h.html
/* * 单链表的定义。 */#define SLIST_HEAD(name, type) \struct name { \ struct type *slh_first; /* 第一个元素*/\}#define SLIST_HEAD_INITIALIZER(head)\ { NULL }#define SLIST_ENTRY (type) \struct {\ struct type *sle_next; /* 下一个元素*/\}/* * 单链表函数*/#define SLIST_INIT(head) do { \ (head)-slh_first=NULL; while (/*CONSTCOND*/0) #define SLIST_INSERT_AFTER (slistelm, elm, field) do { \ (elm)-field.sle_next=(slistelm)-field.sle_next=(elm) ;\} while (/*CONSTCOND*/0)#define SLIST_INSERT_HEAD(head, elm, field ) do { \ (elm)-field.sle_next=(head)-slh_first; \ (head)-slh_first=(elm); \} while (/*CONSTCOND*/0)#define SLIST_REMOVE_HEAD(head, field ) do { \ (head)-slh_first=(head)-slh_first-field.sle_next; while (/*CONSTCOND*/0)#Definition SLIST_REMOVE(head, elm, type, field) do { \ if ((head)- slh_first==(elm)) {\ SLIST_REMOVE_HEAD((head), field); \ 结构类型*curelm=( head)-slh_first; \ while(curelm-field.sle_next !=(elm)) \curelm=curelm-field .sle_next=\curelm-field.sle_next-field.sle_next; while (/*CONSTCOND*/0)#define SLIST_FOREACH(var, head, field)\ for((var)=(head)-slh_first; (var); (var)=(var)-field.sle_next)/* * 单链表访问方式。 */#define SLIST_EMPTY(head) ((head)-slh_first==NULL)#define SLIST_FIRST(head) ((head)-slh_first)#define SLIST_NEXT(elm, field) ((elm) )-field.sle_next)cJSONhttps://github .com/DaveGamble/cJSON.git
JSON(JavaScript 对象表示法)是一种轻量级数据交换格式。 JSON 的简单性和清晰的层次结构使其成为理想的数据交换语言。 易于人类读写,易于机器解析生成,有效提高网络传输效率。 cJSON 是一个用C 语言编写的库,用于解析和打包JSON 数据。
protobufhttps://github.com/protocolbuffers/protobuf
Protocol buffers是Google开发的一种数据格式,类似于XML,可用于数据存储、通信协议等。它独立于语言和平台并且具有高度可扩展性。 JSON类型的数据具有极好的可读性,但由于整个数据包中都包含无用的数据,自然就带来了一定的通信负载。 protobuf 是一种比JSON 更轻量级的数据格式。 protobuf的优点:
强大的可扩展性。消息格式升级,兼容性更好。它比Json 或XML 需要更少的序列化,使其适合网络传输。谢谢你!私信回复Embedded Book即可领取博主精心编辑的嵌入式电子书。