大家好,我是LinuxZn。
本次我們來分享gear-lib:
什么是gear-lib?
gear-lib是一組通用的C基礎庫。
全部用POSIX C實現(xiàn),目標是為了跨平臺兼容linux, windows, android, ios。
適用于物聯(lián)網(wǎng),嵌入式,以及網(wǎng)絡服務開發(fā)等場景。
gear-lib地址:
https://github.com/gozfree/gear-lib或者
https://gitee.com/gozfreee/gear-lib
license:MIT。
關于開源軟件協(xié)議相關文章:常用的開源協(xié)議有哪些?
gear-lib的使用
gear-lib整理涵蓋如下內(nèi)容:
下載得到:
下面基于Ubuntu環(huán)境,整體編譯、安裝:
?
./build.sh sudo?./build.sh?install
?
下面我們選取幾個庫實踐感受一下(庫的文件夾下面有對應的使用示例,可參考這些示例)。
1、libconfig
libconfig支持ini、json、lua三種格式配置文件的解析,并且統(tǒng)一操作接口,即可以調(diào)用同一套接口對ini、json、lua三種格式配置文件進行解析。libconfig會自動識別配置文件后綴調(diào)用對應格式文件的操作接口。
(1)解析ini文件:
static?int?ini_test(void) { ????struct?config?*conf?=?conf_load("ini/ini_test.ini"); ????printf("==============================ini_test============================== "); ????printf("修改之前ini_test.ini的內(nèi)容:? "); ????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的內(nèi)容:? "); ????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文件解析的往期文章:嵌入式開發(fā)小記,實用小知識分享
(2)解析json文件:
static?int?json_test(void) { ????struct?config?*conf?=?conf_load("json/json_test.json"); ????printf("==============================json_test============================== "); ????printf("修改之前json_test.json的內(nèi)容:? "); ????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的內(nèi)容:? "); ????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數(shù)據(jù)
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; ????/*?初始化一個動態(tài)數(shù)組?*/ ????da_init(darray); ????/*?給數(shù)組賦值?*/ ????for?(int?i?=?0;?i?10;?i++) ????{ ????????da_push_back(darray,?&i); ????} ????/*?遍歷數(shù)組元素并打印?*/ ????for?(int?i?=?0;?i?10;?i++) ????{ ????????printf("%d?",?darray.array[i]); ????} ????printf(" "); ???? ????/*?數(shù)組清理?*/ ????da_free(darray); }
?
編譯、運行:
動態(tài)數(shù)組相關往期文章:什么是不完全類型?
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); }
?
編譯、運行:
以上就是本期分享的內(nèi)容。gear-lib包含的庫很豐富,覆蓋很多方面,大家可以去簡單了解一下,看看是否有一些庫是自己學習、工作中用得上的,避免重復造輪子。
另外,gear-lib是碼云上GVP(最有價值開源項目),值得我們?nèi)W習。gear-lib雖然總的代碼量也不少,但是各個庫都相對獨立(盡管有些庫之間有依賴):
這也很方便我們選取一些庫來進行代碼研讀。一起讀代碼,一起進步~
審核編輯:湯梓紅
評論
查看更多