<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          用c語言實現(xiàn)了一個跨平臺開發(fā)庫

          共 4950字,需瀏覽 10分鐘

           ·

          2022-01-09 21:36

          ????關(guān)注、星標公眾號,直達精彩內(nèi)容

          作者?|??ruki


          TBOX簡介

          TBOX是一個用c語言實現(xiàn)的跨平臺開發(fā)庫。

          針對各個平臺,封裝了統(tǒng)一的接口,簡化了各類開發(fā)過程中常用操作,使你在開發(fā)過程中,更加關(guān)注實際應(yīng)用的開發(fā),而不是把時間浪費在瑣碎的接口兼容性上面,并且充分利用了各個平臺獨有的一些特性進行優(yōu)化。

          這個項目的目的,是為了使C開發(fā)更加的簡單高效。

          目前支持的平臺有: Windows, Macosx, Linux, Android, iOS, *BSD等等。

          通過xmake支持各種編譯模式:

          • Release: 正式版編譯,禁用調(diào)試信息、斷言,各種檢測機制,啟用編譯器優(yōu)化
          • Debug: 調(diào)試模式,默認啟用詳細調(diào)試信息、斷言、內(nèi)存越界檢測、內(nèi)存泄漏、鎖競爭分析等檢測機制
          • Small: 最小化編譯,默認禁用所有擴展模塊,啟用編譯器最小化優(yōu)化
          • Micro: 針對嵌入式平臺,僅僅編譯tbox微內(nèi)核,僅提供最基礎(chǔ)的跨平臺接口,生成庫僅64K左右(內(nèi)置輕量libc接口實現(xiàn))

          特性

          流庫

          針對http、file、socket、data等流數(shù)據(jù),實現(xiàn)統(tǒng)一接口進行讀寫,并且支持: 阻塞、非阻塞、異步 三種讀寫模式。

          支持中間增加多層filter流進行流過濾,實現(xiàn)邊讀取,內(nèi)部邊進行解壓、編碼轉(zhuǎn)換、加密等操作,極大的減少了內(nèi)存使用。

          主要提供以下模塊:

          • stream:通用非阻塞流,用于一般的單獨io處理,同時支持協(xié)程以實現(xiàn)異步傳輸。
          • transfer:流傳輸器,維護兩路流的傳輸。
          • static_stream:針對靜態(tài)數(shù)據(jù)buffer優(yōu)化的靜態(tài)流,用于輕量快速的數(shù)據(jù)解析。

          協(xié)程庫

          • 快速高效的協(xié)程切換支持
          • 提供跨平臺支持,核心切換算法參考boost,并且對其進行重寫和優(yōu)化,目前支持架構(gòu):x86, x86_64, arm, arm64, mips32
          • 提供channel協(xié)程間數(shù)據(jù)通信支持,基于生產(chǎn)、消費者模型
          • 提供信號量、協(xié)程鎖支持
          • socket、stream都模塊原生支持協(xié)程,并且可在線程和協(xié)程間進行無縫切換
          • 提供http、file等基于協(xié)程的簡單服務(wù)器實例,只需幾百行代碼,就可以從socket開始寫個高性能io服務(wù)器,代碼邏輯比異步回調(diào)模式更加清晰
          • 同時提供stackfull, stackless兩種協(xié)程模式支持,stackless協(xié)程更加的輕量(每個協(xié)程只占用幾十個bytes),切換更快(會犧牲部分易用性)
          • 支持epoll, kqueue, poll, select 和 IOCP
          • 在協(xié)程和poller中支持同時等待和調(diào)度socket,pipe io和process

          數(shù)據(jù)庫

          • 統(tǒng)一并簡化數(shù)據(jù)庫操作接口,適配各種數(shù)據(jù)源,通過統(tǒng)一的url來自動連接打開支持的數(shù)據(jù)庫,數(shù)據(jù)的枚舉采用迭代器模型。
          • 目前支持sqlite3以及mysql兩種關(guān)系型數(shù)據(jù)庫,也可自定義擴展使用其他關(guān)系型數(shù)據(jù)庫。

          xml庫

          • 針對xml提供DOM和SAX兩種解析模式,SAX方式采用外部迭代模式,靈活性和性能更高,并且可以選擇指定路徑,進行解析。
          • 解析過程完全基于stream,所以是高度流化的,可以實現(xiàn)邊下載、邊解壓、邊轉(zhuǎn)碼、邊解析一條龍服務(wù),使用較低的內(nèi)存也可以解析大規(guī)模數(shù)據(jù)。
          • 提供xml writer以支持對xml生成

          內(nèi)存庫

          • 參考linux內(nèi)核內(nèi)存管理機制的實現(xiàn),并對其進行各種改造和優(yōu)化,所實現(xiàn)的TBOX獨有的一整套內(nèi)存池管理架構(gòu)。
          • 調(diào)試模式下,可以輕松檢測并定位內(nèi)存泄露、內(nèi)存越界溢出、內(nèi)存重疊覆蓋等常見內(nèi)存問題,并對整體內(nèi)存的使用進行了統(tǒng)計和簡要分析。
          • 針對大塊數(shù)據(jù)、小塊數(shù)據(jù)、字符串數(shù)據(jù)進行了充分的利用,避免了大量外部碎片和內(nèi)部碎片的產(chǎn)生。分配操作進行了各種優(yōu)化,96%的情況下,效率都是在O(1)。

          容器庫

          • 提供哈希、鏈表、數(shù)組、隊列、堆棧、最小最大堆等常用容器。
          • 支持各種常用成員類型,在原有的容器期初上,其成員類型還可以完全自定義擴展。
          • 所有容器都支持迭代器操作。
          • 大部分容器都可以支持基于stream的序列化和反序列化操作。

          算法庫

          • 提供各種排序算法:冒泡排序、堆排序、快速排序、插入排序。
          • 提供各種查找算法:線性遍歷、二分法搜索。
          • 提供各種遍歷、刪除、統(tǒng)計算法。
          • 以迭代器為接口,實現(xiàn)算法和容器的分離,類似stl,但是c實現(xiàn)的,更加輕量。

          網(wǎng)絡(luò)庫

          • 實現(xiàn)http客戶端模塊
          • 實現(xiàn)cookies
          • 實現(xiàn)dns解析與緩存
          • 實現(xiàn)ssl(支持openssl, polarssl, mbedtls)
          • 支持ipv4、ipv6
          • 支持通過協(xié)程實現(xiàn)異步模式

          數(shù)學(xué)運算庫

          • 提供各種精度的定點運算支持
          • 提供隨機數(shù)生成器

          libc庫

          • libc的一個輕量級實現(xiàn),完全跨平臺,并且針對不同架構(gòu)進行了優(yōu)化。
          • 支持大部分字符串、寬字符串操作。
          • 擴展字符串、寬字符串的各種大小寫不敏感操作接口
          • 擴展memset_u16memset_u32等接口,并對其進行高度優(yōu)化,尤其適合圖形渲染程序

          libm庫

          • libm部分接口的一個輕量級實現(xiàn),以及對常用系統(tǒng)接口的封裝。(目前只實現(xiàn)了部分,之后有時間會完全實現(xiàn)掉)
          • 擴展部分常用接口,增加對sqrt、log2等常用函數(shù)的整數(shù)版本計算,進行高度優(yōu)化,不涉及浮點運算,適合嵌入式環(huán)境使用。

          object庫

          • 輕量級類apple的CoreFoundation庫,支持object、dictionary、array、string、number、date、data等常用對象,并且可以方便擴展自定義對象的序列化。
          • 支持對xml、json、binary以及apple的plist(xplist/bplist)格式序列化和反序列化。并且實現(xiàn)自有的binary序列化格式, 針對明文進行了簡單的加密,在不影響性能的前提下,序列化后的大小比bplist節(jié)省30%。

          平臺庫

          • 提供file、directory、socket、thread、time等常用系統(tǒng)接口
          • 提供atomic、atomic64接口
          • 提供高精度、低精度定時器
          • 提供高性能的線程池操作
          • 提供event、mutex、semaphore、spinlock等事件、互斥、信號量、自旋鎖操作
          • 提供獲取函數(shù)堆棧信息的接口,方便調(diào)試和錯誤定位
          • 提供跨平臺動態(tài)庫加載接口(如果系統(tǒng)支持的話)
          • 提供io輪詢器,針對epoll, poll, select, kqueue進行跨平臺封裝
          • 提供跨平臺上下文切換接口,主要用于協(xié)程實現(xiàn),切換效率非常高

          壓縮庫

          • 支持zlib/zlibraw/gzip的壓縮與解壓(需要第三方zlib庫支持)。

          字符編碼庫

          • 支持utf8、utf16、gbk、gb2312、uc2、uc4 之間的互相轉(zhuǎn)碼,并且支持大小端格式。

          實用工具庫

          • 實現(xiàn)base64/32編解碼
          • 實現(xiàn)crc32、adler32、md5、sha1等常用hash算法
          • 實現(xiàn)日志輸出、斷言等輔助調(diào)試工具
          • 實現(xiàn)url編解碼
          • 實現(xiàn)位操作相關(guān)接口,支持各種數(shù)據(jù)格式的解析,可以對8bits、16bits、32bits、64bits、float、double以及任意bits的字段進行解析操作,并且同時支持大端、小端和本地端模式,并針對部分操作進行了優(yōu)化,像static_stream、stream都有相關(guān)接口對其進行了封裝,方便在流上進行快速數(shù)據(jù)解析。
          • 實現(xiàn)swap16、swap32、swap64等位交換操作,并針對各個平臺進行了優(yōu)化。
          • 實現(xiàn)一些高級的位處理接口,例如:位0的快速統(tǒng)計、前導(dǎo)0和前導(dǎo)1的快速位計數(shù)、后導(dǎo)01的快速位計數(shù)
          • 實現(xiàn)單例模塊,可以對靜態(tài)對象、實例對象進行快速的單例封裝,實現(xiàn)全局線程安全
          • 實現(xiàn)option模塊,對命令行參數(shù)進行解析,提供快速方便的命令行選項建立和解析操作,對于寫終端程序還是很有幫助的

          正則表達式庫

          • 支持匹配和替換操作
          • 支持全局、多行、大小寫不敏感等模式
          • 使用pcre, pcre2和posix正則庫

          一些使用tbox的項目:

          • gbox
          • vm86
          • xmake
          • itrace
          • 更多項目

          編譯

          請先安裝: xmake

          #?默認直接編譯當前主機平臺
          $?cd?./tbox
          $?xmake

          #
          ?編譯mingw平臺
          $?cd?./tbox
          $?xmake?f?-p?mingw?--sdk=/home/mingwsdk
          $?xmake

          #
          ?編譯iphoneos平臺
          $?cd?./tbox
          $?xmake?f?-p?iphoneos
          $?xmake

          #
          ?編譯android平臺
          $?cd?./tbox
          $?xmake?f?-p?android?--ndk=xxxxx
          $?xmake

          #
          ?交叉編譯
          $?cd?./tbox
          $?xmake?f?-p?linux?--sdk=/home/sdk?#--bin=/home/sdk/bin
          $?xmake

          例子

          #include?"tbox/tbox.h"

          int?main(int?argc,?char**?argv)
          {
          ????//?init?tbox
          ????if?(!tb_init(tb_null,?tb_null))?return?0;

          ????//?trace
          ????tb_trace_i("hello?tbox");

          ????//?init?vector
          ????tb_vector_ref_t?vector?=?tb_vector_init(0,?tb_element_str(tb_true));
          ????if?(vector)
          ????{
          ????????//?insert?item
          ????????tb_vector_insert_tail(vector,?"hello");
          ????????tb_vector_insert_tail(vector,?"tbox");

          ????????//?dump?all?items
          ????????tb_for_all?(tb_char_t?const*,?cstr,?vector)
          ????????{
          ????????????//?trace
          ????????????tb_trace_i("%s",?cstr);
          ????????}

          ????????//?exit?vector
          ????????tb_vector_exit(vector);
          ????}

          ????//?init?stream
          ????tb_stream_ref_t?stream?=?tb_stream_init_from_url("http://www.xxx.com/file.txt");
          ????if?(stream)
          ????{
          ????????//?open?stream
          ????????if?(tb_stream_open(stream))
          ????????{
          ????????????//?read?line
          ????????????tb_long_t?size?=?0;
          ????????????tb_char_t?line[TB_STREAM_BLOCK_MAXN];
          ????????????while?((size?=?tb_stream_bread_line(stream,?line,?sizeof(line)))?>=?0)
          ????????????{
          ????????????????//?trace
          ????????????????tb_trace_i("line:?%s",?line);
          ????????????}
          ????????}

          ????????//?exit?stream
          ????????tb_stream_exit(stream);
          ????}

          ????//?wait
          ????tb_getchar();

          ????//?exit?tbox
          ????tb_exit();
          ????return?0;
          }



          版權(quán)歸原作者所有,如有侵權(quán),請聯(lián)系刪除。

          ???????????????? ?END ?????????????????

          關(guān)注我的微信公眾號,回復(fù)“加群”按規(guī)則加入技術(shù)交流群。

          關(guān)注公眾號,回復(fù)“pdf”獲取程序員必讀經(jīng)典書單,一起編程一起進階。



          點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。

          瀏覽 21
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天堂男人网| 无吗中文| 婷婷激情五月天丁香 | 91精品色 | 国产第八页 |