大家好,我是LinuxZn。
本次我們來分享gear-lib:
什么是gear-lib?
gear-lib是一組通用的C基礎(chǔ)庫。
全部用POSIX C實現(xiàn),目標(biāo)是為了跨平臺兼容linux, windows, android, ios。
適用于物聯(lián)網(wǎng),嵌入式,以及網(wǎng)絡(luò)服務(wù)開發(fā)等場景。
gear-lib地址:
https://github.com/gozfree/gear-lib或者
https://gitee.com/gozfreee/gear-lib
license:MIT。
關(guān)于開源軟件協(xié)議相關(guān)文章:常用的開源協(xié)議有哪些?
gear-lib的使用
gear-lib整理涵蓋如下內(nèi)容:

下載得到:

下面基于Ubuntu環(huán)境,整體編譯、安裝:
?
./build.sh sudo?./build.sh?install

?
下面我們選取幾個庫實踐感受一下(庫的文件夾下面有對應(yīng)的使用示例,可參考這些示例)。
1、libconfig
libconfig支持ini、json、lua三種格式配置文件的解析,并且統(tǒng)一操作接口,即可以調(diào)用同一套接口對ini、json、lua三種格式配置文件進行解析。libconfig會自動識別配置文件后綴調(diào)用對應(yīng)格式文件的操作接口。

(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相關(guān)往期文章:
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ù)組相關(guān)往期文章:什么是不完全類型?
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包含的庫很豐富,覆蓋很多方面,大家可以去簡單了解一下,看看是否有一些庫是自己學(xué)習(xí)、工作中用得上的,避免重復(fù)造輪子。
另外,gear-lib是碼云上GVP(最有價值開源項目),值得我們?nèi)W(xué)習(xí)。gear-lib雖然總的代碼量也不少,但是各個庫都相對獨立(盡管有些庫之間有依賴):

這也很方便我們選取一些庫來進行代碼研讀。一起讀代碼,一起進步~
審核編輯:湯梓紅
電子發(fā)燒友App




















評論