Eine glib-ähnliche plattformübergreifende C-Bibliothek
Unterstützung des Projekts
Unterstützen Sie dieses Projekt, indem Sie Sponsor werden. Hier erscheint Ihr Logo mit einem Link zu Ihrer Website. [Sponsor werden]
Einführung (中文)
TBOX ist eine glib-ähnliche plattformübergreifende C-Bibliothek, die einfach zu verwenden und dennoch leistungsstark ist.
Das Projekt konzentriert sich auf die Vereinfachung der C-Entwicklung und stellt viele Module bereit (z. B. Stream, Coroutine, Regex, Container, Algorithmus ...), sodass jeder Entwickler schnell damit umgehen und die Produktivitätssteigerung bei der Entwicklung in C-Sprache genießen kann.
Es unterstützt die folgenden Plattformen: Windows, macOS, Linux, Android, iOS, *BSD usw.
Und es bietet viele Kompilierungsoptionen mit xmake:
- Release: Deaktivieren Sie Debug-Informationen, Assertion und Speicherprüfung und aktivieren Sie die Optimierung.
- Debug: Aktivieren Sie Debug-Informationen, Assertion und Speicherprüfung und deaktivieren Sie die Optimierung.
- Klein: Deaktivieren Sie alle Erweiterungsmodule und aktivieren Sie die Platzoptimierung.
- Mikro: Kompilieren einer Mikrobibliothek (~64 KB) für das Einbettungssystem.
Wenn Sie mehr wissen möchten, lesen Sie bitte: Dokumente, Github und Gitee
Merkmale
Die Stream-Bibliothek
- Unterstützt Datei-, Daten-, HTTP- und Socket-Quelle
- Unterstützt den Stream-Filter für gzip, charset und...
- Implementiert die Stream-Übertragung
- Implementiert den statischen Pufferstrom zum Parsen von Daten
- Unterstützt Coroutine und implementiert asynchrone Vorgänge
Die Coroutine-Bibliothek
- Bietet leistungsstarken Coroutine-Switch
- Unterstützt Arm, Arm64, x86, x86_64 ..
- Stellt Kanalschnittstellen bereit
- Bietet Semaphor- und Sperrschnittstellen
- Unterstützt IO-Socket- und Stream-Betrieb in Coroutine
- Stellt einige IO-Server (http ..) mit Coroutine bereit
- Bietet stapelreiche und stapellose Coroutinen
- Unterstützt Epoll, Kqueue, Poll, Select und IOCP
- Unterstützung für das gleichzeitige Warten von Pipe, Socket und Prozess in Coroutine und Poller
Die Datenbankbibliothek
- Unterstützt MySQL- und SQLite3-Datenbanken und zählt Daten im Iteratormodus auf
Die XML-Parser-Bibliothek
- Unterstützt den DOM- und SAX-Modus und unterstützt xpath
Die Serialisierungs- und Deserialisierungsbibliothek
- Unterstützt XML-, JSON-, Bplist-, XPlist- und Binärformate
Die Speicherbibliothek
- Implementiert einige Speicherpools zur Speicheroptimierung
- Unterstützt die schnelle Erkennung von Speicherfehlern. Es kann die folgenden Arten von Fehlern für den Debug-Modus erkennen:
- Zugriffe außerhalb der Grenzen auf Heap und Globals
- Nachnutzung kostenlos
- doppelt frei, ungültig frei
- Speicherlecks
Die Containerbibliothek
- Implementiert Hash-Tabelle, Einzelliste, Doppelliste, Vektor, Stapel, Warteschlange und Min/Max-Heap. Unterstützt den Iteratormodus für Algorithmen
Die Algorithmenbibliothek
- Verwendet den Iteratormodus
- Implementiert den Such-, Binärsuch- und Rückwärtssuchalgorithmus
- Implementiert Sortier-, Blasensortier-, Schnellsortier-, Heapsortier- und Einfügesortieralgorithmen
- Implementiert count, Walk Items, Reverse Walk Items, for_all und rfor_all
Die Netzwerkbibliothek
- Implementiert DNS (zwischengespeichert)
- Implementiert SSL (openssl, polarssl, mbedtls)
- Implementiert http
- Implementiert Cookies
- Unterstützt IPv4, IPv6
- Unterstützt Coroutine
Die Plattformbibliothek
- Implementiert einen Timer, einen schnellen Timer und einen Timer mit geringer Präzision
- Implementiert atomare und atomare64-Operationen
- Implementiert Spinlock, Mutex, Event, Semaphor, Thread und Thread-Pool
- Implementiert Datei- und Socket-Vorgänge
- Implementiert den Poller mit epoll, poll, select, kqueue ...
- Implementiert Switch-Kontextschnittstellen für Coroutine
Die Zeichensatzbibliothek
- Unterstützt utf8, utf16, gbk, gb2312, uc2 und uc4
- Unterstützt den Big-Endian- und Little-Endian-Modus
Die Zip-Bibliothek
- Unterstützt die Formate gzip, zlibraw und zlib unter Verwendung der zlib-Bibliothek, sofern vorhanden
- Implementiert den Algorithmus lzsw, lz77 und rlc
Die Utils-Bibliothek
- Implementiert Base32-, Base64-Encoder und -Decoder
- Implementiert die Assert- und Trace-Ausgabe für den Debug-Modus
- Implementiert eine Bitoperation zum Parsen von u8-, u16-, u32- und u64-Daten
Die Mathematikbibliothek
- Implementiert einen Zufallsgenerator
- Implementiert eine schnelle Festkommaberechnung und unterstützt 6-Bit-, 16-Bit- und 30-Bit-Festkommazahlen
Die libc-Bibliothek
- Implementiert leichtgewichtige libc-Bibliotheksschnittstellen. Der Schnittstellenname enthält das Präfix
tb_xxx
um Konflikte zu vermeiden - Implementiert die Schnittstellenerweiterung strixxxx strrxxx wcsixxx wcsrxxx
- Optimiert einige häufig verwendete Schnittstellen, z. B. memset, memcpy, strcpy ...
- Implementiert die Erweiterungsschnittstellen
memset_u16
, memset_u32
und memset_u64
Die libm-Bibliothek
- Implementiert leichtgewichtige libm-Bibliotheksschnittstellen. Der Schnittstellenname enthält das Präfix
tb_xxx
um Konflikte zu vermeiden - Unterstützt Float- und Double-Typ
Die Regex-Bibliothek
- Unterstützt „Matchen und Ersetzen“.
- Unterstützt den globalen/mehrzeiligen/caseless-Modus
- Verwendet die Regex-Module pcre, pcre2 und posix
Die Hash-Bibliothek
- Implementiert die Hash-Algorithmen crc32, adler32, md5 und sha1
- Implementiert einige String-Hash-Algorithmen (z. B. bkdr, fnv32, fnv64, sdbm, djb2, rshash, aphash ...)
- Implementiert den UUID-Generator
Projekte
Einige Projekte mit tbox:
- gbox
- vm86
- xmake
- itrace
- mehr
Erstellen (xmake)
Bitte installieren Sie zuerst 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
Erstellen (xmake.sh)
Beispiel
#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 ;
}
Technische Unterstützung
Sie können auch darüber nachdenken, uns zu sponsern, um technische Supportleistungen zu erhalten. [Sponsor werden]
Kontakte
- E-Mail: [email protected]
- Homepage: tboox.org
- Community:/r/tboox auf reddit
- ChatRoom: Chat auf Telegram, Chat auf Gitter
- QQ-Gruppe: 343118190 (vollständig), 662147501
- Wechat öffentlich: tboox-os