Una biblioteca C multiplataforma simplista
Apoyando el proyecto
Apoya este proyecto convirtiéndote en patrocinador. Su logotipo aparecerá aquí con un enlace a su sitio web. [Conviértete en patrocinador]
Introducción (中文)
TBOX es una biblioteca C multiplataforma simplista que es fácil de usar pero poderosa por naturaleza.
El proyecto se centra en facilitar el desarrollo en C y proporciona muchos módulos (por ejemplo, flujo, rutina, expresión regular, contenedor, algoritmo...), para que cualquier desarrollador pueda utilizarlo rápidamente y disfrutar del aumento de productividad al desarrollar en lenguaje C.
Es compatible con las siguientes plataformas: Windows, Macosx, Linux, Android, iOS, *BSD, etc.
Y proporciona muchas opciones de compilación usando xmake:
- Lanzamiento: deshabilite la información de depuración, la afirmación, la verificación de memoria y habilite la optimización.
- Depurar: habilite la información de depuración, la afirmación, la verificación de memoria y deshabilite la optimización.
- Pequeño: deshabilite todos los módulos de extensión y habilite la optimización del espacio.
- Micro: compilación de microbiblioteca (~64K) para el sistema integrado.
Si desea saber más, consulte: Documentos, Github y Gitee.
Características
La biblioteca de flujo
- Soporta archivos, datos, http y fuente de socket
- Admite el filtro de transmisión para gzip, charset y...
- Implementa la transferencia de flujo.
- Implementa el flujo de búfer estático para analizar datos.
- Admite corrutina e implementa operación asincrónica
La biblioteca de rutinas
- Proporciona un conmutador de rutina de alto rendimiento
- Soporta brazo, arm64, x86, x86_64..
- Proporciona interfaces de canal.
- Proporciona interfaces de semáforo y bloqueo.
- Admite operación de flujo y socket io en corrutina
- Proporciona algunos servidores io (http ..) usando corrutina
- Proporciona corrutinas apiladas y sin apilar
- Admite epoll, kqueue, poll, select e IOCP
- Soporte para esperar tubería, socket y proceso en corrutina y poller al mismo tiempo
La biblioteca de bases de datos
- Admite bases de datos mysql y sqlite3 y enumera datos usando el modo iterador
La biblioteca del analizador xml
- Admite el modo DOM y SAX y admite xpath
La biblioteca de serialización y deserialización.
- Admite formatos xml, json, bplist, xplist y binarios
La biblioteca de la memoria.
- Implementa algunos grupos de memoria para optimizar la memoria.
- Admite la detección rápida de errores de memoria. puede detectar los siguientes tipos de errores para el modo de depuración:
- accesos fuera de límites a heap y globales
- uso después de la liberación
- doblemente gratis, gratis inválido
- pérdidas de memoria
La biblioteca de contenedores
- Implementa tabla hash, lista única, lista doble, vector, pila, cola y montón mínimo/máximo. Admite modo iterador para algoritmo
La biblioteca de algoritmos
- Utiliza el modo iterador.
- Implementa algoritmos de búsqueda, búsqueda binaria y búsqueda inversa.
- Implementa algoritmos de clasificación, clasificación de burbujas, clasificación rápida, clasificación de montón y clasificación por inserción.
- Recuento de implementos, elementos de recorrido, elementos de recorrido inverso, for_all y rfor_all
La biblioteca de la red
- Implementa dns (en caché)
- Implementa ssl(openssl, polarssl, mbedtls)
- Implementa http
- Implementa cookies
- Soporta ipv4, ipv6
- Soporta corrutina
La biblioteca de la plataforma.
- Implementa temporizador, temporizador rápido y de baja precisión.
- Implementa operaciones atómicas y atómicas64.
- Implementa spinlock, mutex, evento, semáforo, subproceso y grupo de subprocesos.
- Implementa operaciones de archivos y sockets.
- Implementa poller usando epoll, poll, select, kqueue...
- Implementa interfaces de contexto de cambio para rutinas.
La biblioteca de caracteres
- Soporta utf8, utf16, gbk, gb2312, uc2 y uc4
- Admite el modo big endian y little endian
La biblioteca zip
- Admite formatos gzip, zlibraw, zlib usando la biblioteca zlib si existe
- Implementa el algoritmo lzsw, lz77 y rlc.
La biblioteca de utilidades.
- Implementa codificador y decodificador base32, base64.
- Implementa resultados de afirmación y seguimiento para el modo de depuración.
- Implementa la operación de bits para analizar datos u8, u16, u32, u64.
la biblioteca de matemáticas
- Implementa generador aleatorio.
- Implementa un cálculo rápido de punto fijo, admite números de punto fijo de 6 bits, 16 bits y 30 bits
la biblioteca libc
- Implementa interfaces de biblioteca libc livianas, el nombre de la interfaz contiene el prefijo
tb_xxx
para evitar conflictos - Implementa la extensión de interfaz strixxx strrxxx wcsixxx wcsrxxx
- Optimiza algunas interfaces de uso frecuente, por ejemplo, memset, memcpy, strcpy...
- Implementa las interfaces de extensión
memset_u16
, memset_u32
, memset_u64
la biblioteca libm
- Implementa interfaces de biblioteca libm livianas, el nombre de la interfaz contiene el prefijo
tb_xxx
para evitar conflictos - Soporta tipo flotador y doble
La biblioteca de expresiones regulares
- Admite combinar y reemplazar
- Admite modo global/multilínea/sin mayúsculas y minúsculas
- Utiliza módulos pcre, pcre2 y posix regex
La biblioteca de hash
- Implementa el algoritmo hash crc32, adler32, md5 y sha1.
- Implementa algunos algoritmos hash de cadenas (por ejemplo, bkdr, fnv32, fnv64, sdbm, djb2, rshash, aphash...)
- Implementa generador de uuid
Proyectos
Algunos proyectos que utilizan tbox:
- gbox
- vm86
- xmake
- itrace
- más
Construir (xmake)
Instale xmake primero: 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
Construir (xmake.sh)
Ejemplo
#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 ;
}
Apoyo técnico
También puede considerar patrocinarnos para obtener servicios de soporte técnico, [Conviértase en patrocinador]
Contactos
- Correo electrónico: [email protected]
- Página de inicio: tboox.org
- Comunidad:/r/tboox en reddit
- ChatRoom: chatea en Telegram, chatea en Gitter
- Grupo QQ: 343118190(completo), 662147501
- Público de Wechat: tboox-os