ไลบรารี C ข้ามแพลตฟอร์มที่มีลักษณะคล้าย glib
สนับสนุนโครงการ
สนับสนุนโครงการนี้ด้วยการเป็นผู้สนับสนุน โลโก้ของคุณจะแสดงที่นี่พร้อมลิงก์ไปยังเว็บไซต์ของคุณ [มาเป็นสปอนเซอร์]
บทนำ (中文)
TBOX เป็นไลบรารี C ข้ามแพลตฟอร์มที่มีลักษณะคล้าย glib ซึ่งใช้งานง่ายแต่ทรงพลังโดยธรรมชาติ
โปรเจ็กต์มุ่งเน้นไปที่การทำให้การพัฒนา C ง่ายขึ้น และจัดเตรียมโมดูลจำนวนมาก (เช่น สตรีม, coroutine, regex, คอนเทนเนอร์, อัลกอริธึม ...) เพื่อให้นักพัฒนาคนใดสามารถหยิบมันขึ้นมาได้อย่างรวดเร็วและเพลิดเพลินกับการเพิ่มประสิทธิภาพการทำงานเมื่อพัฒนาในภาษา C
รองรับแพลตฟอร์มต่อไปนี้: Windows, Macosx, Linux, Android, iOS, *BSD และอื่นๆ
และมีตัวเลือกการคอมไพล์มากมายโดยใช้ xmake:
- เผยแพร่: ปิดใช้งานข้อมูลการแก้ไข การยืนยัน การตรวจสอบหน่วยความจำ และเปิดใช้งานการปรับให้เหมาะสม
- ดีบัก: เปิดใช้งานข้อมูลการดีบัก การยืนยัน การตรวจสอบหน่วยความจำ และปิดใช้งานการปรับให้เหมาะสม
- เล็ก: ปิดใช้งานโมดูลส่วนขยายทั้งหมดและเปิดใช้งานการเพิ่มประสิทธิภาพพื้นที่
- ไมโคร: รวบรวมไมโครไลบรารี (~ 64K) สำหรับระบบฝังตัว
หากคุณต้องการทราบข้อมูลเพิ่มเติม โปรดดูที่: Documents, Github และ Gitee
คุณสมบัติ
ไลบรารีสตรีม
- รองรับไฟล์ ข้อมูล http และซอร์สซ็อกเก็ต
- รองรับตัวกรองสตรีมสำหรับ gzip, charset และ...
- ดำเนินการถ่ายโอนสตรีม
- ใช้สตรีมบัฟเฟอร์แบบคงที่สำหรับการแยกวิเคราะห์ข้อมูล
- รองรับ Coroutine และใช้การดำเนินการแบบอะซิงโครนัส
ห้องสมุด Coroutine
- ให้สวิตช์ coroutine ประสิทธิภาพสูง
- รองรับอาร์มarm64,x86,x86_64 ..
- จัดเตรียมอินเทอร์เฟซช่องสัญญาณ
- จัดเตรียมอินเทอร์เฟซเซมาฟอร์และล็อค
- รองรับซ็อกเก็ต io และการทำงานของสตรีมในโครูทีน
- จัดเตรียมเซิร์ฟเวอร์ io บางตัว (http ..) โดยใช้ coroutine
- ให้โครูทีนแบบสแต็กฟูลและไม่มีสแต็ก
- สนับสนุน epoll, kqueue, โพล, เลือกและ IOCP
- รองรับการรอท่อ ซ็อกเก็ต และกระบวนการในโครูทีนและโพลเลอร์ในเวลาเดียวกัน
ไลบรารีฐานข้อมูล
- รองรับฐานข้อมูล mysql และ sqlite3 และระบุข้อมูลโดยใช้โหมดตัววนซ้ำ
ไลบรารีตัวแยกวิเคราะห์ xml
- รองรับโหมด DOM และ SAX และรองรับ xpath
ไลบรารีการทำให้เป็นอนุกรมและดีซีเรียลไลซ์
- รองรับ xml, json, bplist, xplist, รูปแบบไบนารี
ห้องสมุดหน่วยความจำ
- ใช้พูลหน่วยความจำบางส่วนเพื่อเพิ่มประสิทธิภาพหน่วยความจำ
- รองรับการตรวจจับข้อผิดพลาดของหน่วยความจำที่รวดเร็ว สามารถตรวจจับข้อบกพร่องประเภทต่อไปนี้สำหรับโหมดแก้ไขข้อบกพร่อง:
- การเข้าถึงฮีปและโกลบอลนอกขอบเขต
- ใช้งานฟรี
- ฟรีสองเท่าฟรีที่ไม่ถูกต้อง
- หน่วยความจำรั่ว
ไลบรารีคอนเทนเนอร์
- ใช้ตารางแฮช รายการเดี่ยว รายการคู่ เวกเตอร์ สแต็ก คิว และฮีปต่ำสุด/สูงสุด รองรับโหมดตัววนซ้ำสำหรับอัลกอริทึม
ไลบรารีอัลกอริทึม
- ใช้โหมดตัววนซ้ำ
- ใช้อัลกอริทึมการค้นหา การค้นหาแบบไบนารี และการค้นหาแบบย้อนกลับ
- ใช้การเรียงลำดับ การเรียงลำดับฟอง การเรียงลำดับอย่างรวดเร็ว การเรียงลำดับฮีป และการเรียงลำดับอัลกอริธึมการเรียงลำดับ
- ดำเนินการนับ รายการเดิน รายการเดินย้อนกลับ for_all และ rfor_all
ห้องสมุดเครือข่าย
- ใช้งาน DNS (แคช)
- ใช้งาน ssl (openssl, polarssl, mbedtls)
- ใช้งาน http
- ใช้งานคุกกี้
- รองรับ IPv4, IPV6
- รองรับโครูทีน
ห้องสมุดแพลตฟอร์ม
- ใช้ตัวจับเวลาตัวจับเวลาที่รวดเร็วและแม่นยำต่ำ
- ใช้การทำงานของอะตอมมิกและอะตอมมิก64
- ใช้งาน spinlock, mutex, event, semaphore, thread และ thread pool
- ใช้งานไฟล์ การดำเนินการซ็อกเก็ต
- ใช้งานโพลเลอร์โดยใช้ epoll, โพล, เลือก, kqueue ...
- ใช้อินเทอร์เฟซบริบทของสวิตช์สำหรับ Coroutine
ไลบรารีชุดอักขระ
- รองรับ utf8, utf16, gbk, gb2312, uc2 และ uc4
- รองรับโหมด endian ขนาดใหญ่และ endian เล็กน้อย
ห้องสมุดซิป
- รองรับรูปแบบ gzip, zlibraw, zlib โดยใช้ไลบรารี zlib หากมีอยู่
- ใช้อัลกอริทึม lzsw, lz77 และ rlc
ไลบรารี utils
- ใช้ตัวเข้ารหัสและตัวถอดรหัส base32, base64
- ใช้เอาต์พุตการยืนยันและติดตามสำหรับโหมดดีบัก
- ใช้การดำเนินการบิตสำหรับการแยกวิเคราะห์ข้อมูล u8, u16, u32, u64
ห้องสมุดคณิตศาสตร์
- ใช้ตัวสร้างแบบสุ่ม
- ใช้การคำนวณจุดคงที่ที่รวดเร็ว รองรับหมายเลขจุดคงที่ 6 บิต 16 บิต 30 บิต
ห้องสมุด libc
- ใช้อินเทอร์เฟซไลบรารี libc แบบน้ำหนักเบา ชื่ออินเทอร์เฟซมีคำนำหน้า
tb_xxx
เพื่อหลีกเลี่ยงความขัดแย้ง - ใช้ส่วนขยายอินเทอร์เฟซ strixxx strrxxx wcsixxx wcsrxxx
- ปรับอินเทอร์เฟซที่ใช้บ่อยให้เหมาะสม เช่น memset, memcpy, strcpy ...
- ใช้งานอินเทอร์เฟซส่วนขยาย
memset_u16
, memset_u32
, memset_u64
ห้องสมุด libm
- ใช้อินเทอร์เฟซไลบรารี libm แบบไลท์เวท ชื่ออินเทอร์เฟซประกอบด้วยคำนำหน้า
tb_xxx
เพื่อหลีกเลี่ยงความขัดแย้ง - รองรับแบบลอยและแบบคู่
ไลบรารี regex
- รองรับการจับคู่และแทนที่
- รองรับโหมดโกลบอล/มัลติไลน์/แบบไม่มีเคส
- ใช้โมดูล pcre, pcre2 และ posix regex
ห้องสมุดแฮช
- ใช้อัลกอริทึมแฮช crc32, adler32, md5 และ sha1
- ใช้อัลกอริธึมแฮชสตริงบางตัว (. เช่น bkdr, fnv32, fnv64, sdbm, djb2, rshash, aphash ... )
- ใช้ตัวสร้าง uuid
โครงการ
บางโครงการที่ใช้ tbox:
- จีบ็อกซ์
- vm86
- xmake
- มันเทรซ
- มากกว่า
สร้าง (xmake)
กรุณาติดตั้ง xmake ก่อน: xmake
# build for the host platform
$ cd ./tbox
$ xmake
# build for the mingw platform
$ cd ./tbox
$ xmake f -p mingw --sdk=/home/mingwsdk
$ xmake
# build for the iphoneos platform
$ cd ./tbox
$ xmake f -p iphoneos
$ xmake
# build for the android platform
$ cd ./tbox
$ xmake f -p android --ndk=xxxxx
$ xmake
# build for the linux cross-platform
$ cd ./tbox
$ xmake f -p linux --sdk=/home/sdk # --bin=/home/sdk/bin
$ xmake
สร้าง (xmake.sh)
ตัวอย่าง
#include "tbox/tbox.h"
int main ( int argc , char * * argv ) {
if (! tb_init ( tb_null , tb_null )) return 0 ;
tb_vector_ref_t vector = tb_vector_init ( 0 , tb_element_str ( tb_true ));
if ( vector ) {
tb_vector_insert_tail ( vector , "hello" );
tb_vector_insert_tail ( vector , "tbox" );
tb_for_all ( tb_char_t const * , cstr , vector ) {
tb_trace_i ( "%s" , cstr );
}
tb_vector_exit ( vector );
}
tb_exit ();
return 0 ;
}
การสนับสนุนด้านเทคนิค
คุณยังสามารถพิจารณาสนับสนุนเราเพื่อรับบริการสนับสนุนด้านเทคนิค [มาเป็นผู้สนับสนุน]
รายชื่อผู้ติดต่อ
- อีเมล์:[email protected]
- หน้าแรก:tboox.org
- ชุมชน:/r/tboox บน Reddit
- ห้องแชท:แชททางโทรเลข แชทบน gitter
- กลุ่ม QQ: 343118190(เต็ม), 662147501
- Wechat สาธารณะ: tboox-os