分享一个Linux C工具集!

大家好,我是linuxzn。
本次我们来分享gear-lib:
什么是gear-lib?
gear-lib是一组通用的c基础库。
全部用posix c实现,目标是为了跨平台兼容linux, windows, android, ios。
适用于物联网,嵌入式,以及网络服务开发等场景。
gear-lib地址:
https://github.com/gozfree/gear-lib或者
https://gitee.com/gozfreee/gear-lib
license:mit。
关于开源软件协议相关文章:常用的开源协议有哪些?
gear-lib的使用
gear-lib整理涵盖如下内容:
下载得到:
下面基于ubuntu环境,整体编译、安装:
./build.shsudo ./build.sh install  
下面我们选取几个库实践感受一下(库的文件夹下面有对应的使用示例,可参考这些示例)。
1、libconfig
libconfig支持ini、json、lua三种格式配置文件的解析,并且统一操作接口,即可以调用同一套接口对ini、json、lua三种格式配置文件进行解析。libconfig会自动识别配置文件后缀调用对应格式文件的操作接口。
(1)解析ini文件:
static int ini_test(void){    struct config *conf = conf_load(ini/ini_test.ini);    printf(==============================ini_test==============================);    printf(修改之前ini_test.ini的内容: );    printf(name = %s, conf_get_string(conf, test:name));    printf(num = %d, conf_get_int(conf, test:num));    conf_set_string(conf, test:name, linuxzn);    conf_set_string(conf, test:num, 888);    conf_dump(conf);    printf(修改之后ini_test.ini的内容: );    printf(name = %s, conf_get_string(conf, test:name));    printf(num = %d, conf_get_int(conf, test:num));    conf_save(conf);    conf_unload(conf);    return 0;}  
编译、运行:
ini文件解析的往期文章:嵌入式开发小记,实用小知识分享
(2)解析json文件:
static int json_test(void){    struct config *conf = conf_load(json/json_test.json);    printf(==============================json_test==============================);    printf(修改之前json_test.json的内容: );    printf(name = %s, conf_get_string(conf, test, abc, 1, name));    printf(num= %s, conf_get_string(conf, test, abc, 1, num));    conf_set_string(conf, test, abc, 1, num, 888);    printf(修改之后json_test.json的内容: );    printf(name = %s, conf_get_string(conf, test, abc, 1, name));    printf(num= %s, conf_get_string(conf, test, abc, 1, num));    conf_save(conf);    conf_unload(conf);    return 0;}  
编译、运行:
json文件解析的往期文章:例说嵌入式实用知识之json数据
2、liblog
static void test_no_init(void){    int i;    char tmp[32] = abcd;    for (i = 0; i < 10; i++) {        loge(test rsyslog);        logw(debug msg %d, %s, i, tmp);        logd(debug msg %d, %s, i, tmp);        logi(debug msg %d, %s, i, tmp);        logv(debug msg %d, %s, i, tmp);    }    log_deinit();}  
编译、运行:
log相关往期文章:
bug解决不了?使用日志法
嵌入式软件打log的一些心得!
没有串口,你会如何输出log?
3、libdarray
static void darray_test(void){    darray(int) darray;    /* 初始化一个动态数组 */    da_init(darray);    /* 给数组赋值 */    for (int i = 0; i < 10; i++)    {        da_push_back(darray, &i);    }    /* 遍历数组元素并打印 */    for (int i = 0; i < 10; i++)    {        printf(%d , darray.array[i]);    }    printf();        /* 数组清理 */    da_free(darray);}  
编译、运行:
动态数组相关往期文章:什么是不完全类型?
4、libtime
static void time_test(void){    printf(time_now_sec_str:     %s, time_now_sec_str());    printf(time_now_sec:         % priu64 , time_now_sec());    printf(time_now_msec:        % priu64 , time_now_msec());    printf(time_now_usec:        % priu64 , time_now_usec(null));    printf(time_now_nsec:        % priu64 , time_now_nsec());}  
编译、运行:
5、libhal
static void hal_test(void){    struct cpu_info cpu_info;    cpu_get_info(&cpu_info);    printf(cpu name : %s, cpu_info.name);    printf(cpu cores : %d, cpu_info.cores);    printf(cpu cores_available : %d, cpu_info.cores_available);}  
编译、运行:
6、libsort
void test_bubblesort(){    int a[]={4,1,2,5,3};    print_array(int, %d , a);    bubble_sort(a, sizeof(a)/sizeof(a[0]), sizeof(int), 0);    print_array(int, %d , a);}  
编译、运行:
以上就是本期分享的内容。gear-lib包含的库很丰富,覆盖很多方面,大家可以去简单了解一下,看看是否有一些库是自己学习、工作中用得上的,避免重复造轮子。
另外,gear-lib是码云上gvp(最有价值开源项目),值得我们去学习。gear-lib虽然总的代码量也不少,但是各个库都相对独立(尽管有些库之间有依赖):
这也很方便我们选取一些库来进行代码研读。一起读代码,一起进步~


离线低成本的语音识别方案
小米X1最新消息:第三方配件商亮相小米X1手机!双摄像头+全面屏!价格2000起买不买
电源适配器5v如何降压成3v
探讨中国集成电路产业现状及新趋势
人体是最安全的能量源,怎么把能量从身体中取出
分享一个Linux C工具集!
华为云数据库迁移新方案北京亮相,助力企业加速云上创新
什么是IRQ
探究关于FA526处理器SoC平台的Linux操作系统实现
在CPLD管理下实现高效多串口中断源
整数的编码方法
云计算和AI将会如何改变教育行业
高性能多频段无线通信LSI“ML7436N”:可广泛应用于智能工厂等领域
5G技术赋能智慧法院的作用
晶圆代工急单消失 需求猛吹寒风
符合新兴高效能电源要求的设计
光控节能路灯电路图
怎么看OPPO A95?这些评价一边倒,网友:就是好用!
电信网络诈骗手段不断出新花样,新手段诈骗案件穿上互联网的“隐形衣”
无线中继器安装操作步骤