下拉刷新
C 项目

这里是按照「分类」阅读往期的 HelloGitHub 月刊内容, 您目前在查看 HelloGitHub C 项目 集合。

1
sj.h
Star 1.4k
Vol.116
2 个月前

极简的 C 语言 JSON 解析库。这是一个轻量级的 C 语言 JSON 解析库,提供可靠的 JSON 遍历和基础解析功能。它仅 150 行代码、无外部依赖,采用零内存分配策略,直接在原数据上进行解析,速度快且无内存泄漏风险,适用于嵌入式、物联网和游戏开发等场景。

char *json_text = "{ \"x\": 10, \"y\": 20, \"w\": 30, \"h\": 40 }";

typedef struct { int x, y, w, h; } Rect;

bool eq(sj_Value val, char *s) {
    size_t len = val.end - val.start;
    return strlen(s) == len && !memcmp(s, val.start, len);
}

int main(void) {
    Rect rect = {0};

    sj_Reader r = sj_reader(json_text, strlen(json_text));
    sj_Value obj = sj_read(&r);

    sj_Value key, val;
    while (sj_iter_object(&r, obj, &key, &val)) {
        if (eq(key, "x")) { rect.x = atoi(val.start); }
        if (eq(key, "y")) { rect.y = atoi(val.start); }
        if (eq(key, "w")) { rect.w = atoi(val.start); }
        if (eq(key, "h")) { rect.h = atoi(val.start); }
    }

    printf("rect: { %d, %d, %d, %d }\n", rect.x, rect.y, rect.w, rect.h);
    return 0;
}
2
iotop
Star 607
Vol.115
10 天前

终端下的 IO 资源监控工具。这是一款用于监控 Linux 系统 I/O 的命令行工具,拥有类似 top 命令的交互界面和操作方式,支持实时按 I/O 使用率对进程进行排序和展示。

iotop
Star 1.3w
Vol.115
8 天前

开箱即用的 C 语言加密库。这是一个现代易用、跨平台的 C 语言加密库,为开发者提供全面的加密操作 API。它集成了多种加密、签名和哈希算法,适用于安全通信、数据保护等场景。

libsodium
Star 1.8w
Vol.114
15 小时前

更快的系统信息查看工具。这是一个类似 neofetch 的命令行工具,可以在终端里概览系统的相关信息。它采用 C 语言编写,相较于 bash 写的 neofetch 更快,显示的信息包括操作系统、Shell、内核、CPU、GPU、内存等,目前支持 Linux、Android、FreeBSD、macOS 和 Windows 7+ 操作系统。

fastfetch
Star 5.6k
Vol.114
1 天前

极简易用的 C 语言音频库。这是一个单文件、零依赖、跨平台的 C 语言音频库。它将各种主流操作系统的底层音频 API 封装成简单易用的接口,让你轻松实现音频播放、录制和处理等功能,适用于游戏引擎、实时通讯、嵌入式、离线批处理等场景。

#include "miniaudio/miniaudio.h"

#include <stdio.h>

int main()
{
    ma_result result;
    ma_engine engine;

    result = ma_engine_init(NULL, &engine);
    if (result != MA_SUCCESS) {
        return -1;
    }

    ma_engine_play_sound(&engine, "sound.wav", NULL);

    printf("Press Enter to quit...");
    getchar();

    ma_engine_uninit(&engine);

    return 0;
}
6
nob.h
Star 2.2k
Vol.113
23 天前

单文件的 C 语言构建系统。这是一个仅头文件的 C 语言库,支持通过 C 代码直接定义构建逻辑,实现自动化编译和构建,无需依赖外部工具,仅用 C 编译器即可完成项目构建。

Star 2.4k
Vol.113
5 天前

轻量级多协议的缓存服务。这是一款专注于低延迟和低 CPU 占用的高性能缓存服务,无论单线程还是多线程均表现优异。它可作为独立服务或单文件库使用,支持 RESP、Memcache、HTTP、Postgres 等多种协议。

pogocache
Star 6.3k
Vol.113
5 小时前

让单片机快速实现 USB 功能的库。这是一个开源的嵌入式 USB Host/Device 协议库,专为各种微控制器(MCU)设计,提供高效、易用且可扩展的 USB 支持,兼容多种主流芯片平台。

tinyusb
Star 4.4k
Vol.112
15 天前

Windows 全局 Alt 键窗口管理器。这是一款将 Linux 系统中高效的窗口管理方式复刻到 Windows 平台的工具。你只需按住 Alt 键,即可用鼠标在窗口的任何位置轻松拖动、缩放和停靠,彻底告别繁琐地寻找并点击标题栏和边框的传统操作。

AltSnap
Star 4.7k
Vol.112
2 个月前

兼容全球地址格式的解析库。该项目是用 C 语言编写的全球地址解析库,支持多种语言、格式和国家的地址字符串,能够将地址信息转换为结构化数据。

#include <stdio.h>
#include <stdlib.h>
#include <libpostal/libpostal.h>

int main(int argc, char **argv) {
    // Setup (only called once at the beginning of your program)
    if (!libpostal_setup() || !libpostal_setup_parser()) {
        exit(EXIT_FAILURE);
    }

    libpostal_address_parser_options_t options = libpostal_get_address_parser_default_options();
    libpostal_address_parser_response_t *parsed = libpostal_parse_address("781 Franklin Ave Crown Heights Brooklyn NYC NY 11216 USA", options);

    for (size_t i = 0; i < parsed->num_components; i++) {
        printf("%s: %s\n", parsed->labels[i], parsed->components[i]);
    }

    // Free parse result
    libpostal_address_parser_response_destroy(parsed);

    // Teardown (only called once at the end of your program)
    libpostal_teardown();
    libpostal_teardown_parser();
}
libpostal