整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

Github 2024-03-27 C开源项目日报

Github 2024-03-27 C开源项目日报 Top10

身边奇闻趣事#

根据Github Trendings的统计,今日(2024-03-27统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下:

开发语言

项目数量

C项目

10

C++项目

1

HTML项目

1

我的电视 - 安卓电视直播软件

  • 创建周期:40 天
  • 开发语言:C
  • Star数量:649 个
  • Fork数量:124 次
  • 关注人数:649 人
  • 贡献人数:1 人
  • Open Issues数量:23 个
  • Github地址:https://github.com/lizongying/my-tv.git

我的电视是一个开源的安卓电视直播应用,内置了直播源。

Cosmopolitan Libc: 一次构建,随处运行的C库

  • 创建周期:1381 天
  • 开发语言:C
  • 协议类型:ISC License
  • Star数量:14440 个
  • Fork数量:473 次
  • 关注人数:14440 人
  • 贡献人数:70 人
  • Open Issues数量:151 个
  • Github地址:https://github.com/jart/cosmopolitan.git

Cosmopolitan Libc是一个C库,可以实现一次构建,随处运行的语言,类似于Java,但不需要解释器或虚拟机。相反,它重新配置GCC和Clang以输出符合POSIX标准的多语言格式,在Linux + Mac + Windows + FreeBSD + OpenBSD + NetBSD + BIOS上以最佳性能和最小的占用空间运行。

Memcached: 面向分布式系统的高性能缓存存储

  • 创建周期:5451 天
  • 开发语言:C
  • 协议类型:BSD 3-Clause “New” or “Revised” License
  • Star数量:13106 个
  • Fork数量:3237 次
  • 关注人数:13106 人
  • 贡献人数:182 人
  • Open Issues数量:71 个
  • Github地址:https://github.com/memcached/memcached.git
  • 项目首页: https://memcached.org

Memcached是一个面向分布式系统设计的高性能多线程事件驱动的键值缓存存储。它是解决奇怪行为和超时问题的宝贵资源,并提供了有趣的使用教程。

ImageMagick:数字图像编辑和处理的开源软件套件

  • 创建周期:3237 天
  • 开发语言:C, HTML
  • 协议类型:Other
  • Star数量:10886 个
  • Fork数量:1268 次
  • 关注人数:10886 人
  • 贡献人数:154 人
  • Open Issues数量:104 个
  • Github地址:https://github.com/ImageMagick/ImageMagick.git
  • 项目首页: https://imagemagick.org

ImageMagick是一个免费的开源软件套件,用于编辑和处理数字图像,支持包括JPEG、PNG、GIF、TIFF和PDF在内的多种文件格式。

cJSON:超轻量级JSON解析器

  • 创建周期:2930 天
  • 开发语言:C
  • 协议类型:MIT License
  • Star数量:9902 个
  • Fork数量:3091 次
  • 关注人数:9902 人
  • 贡献人数:76 人
  • Open Issues数量:220 个
  • Github地址:https://github.com/DaveGamble/cJSON.git

cJSON是用ANSI C编写的超轻量级JSON解析器。

Windows 11 驱动程序示例

  • 创建周期:3309 天
  • 开发语言:C, C++
  • 协议类型:Microsoft Public License
  • Star数量:6567 个
  • Fork数量:4862 次
  • 关注人数:6567 人
  • 贡献人数:129 人
  • Open Issues数量:428 个
  • Github地址:https://github.com/microsoft/Windows-driver-samples.git

该存储库包含用于 Microsoft Visual Studio 和 Windows Driver Kit (WDK) 的驱动程序示例,包括通用 Windows 驱动程序和仅桌面驱动程序示例。这些示例旨在为各种硬件形态因素(从手机到台式电脑)提供通用 Windows 驱动程序支持的基础,并且旨在与 Visual Studio 2022 和 Windows Driver Kit (WDK) 11 一起使用。

GmSSL:国产商用密码开源库

  • 创建周期:3404 天
  • 开发语言:C
  • 协议类型:Apache License 2.0
  • Star数量:4663 个
  • Fork数量:1581 次
  • 关注人数:4663 人
  • 贡献人数:31 人
  • Open Issues数量:238 个
  • Github地址:https://github.com/guanzhi/GmSSL.git
  • 项目首页: http://gmssl.org

GmSSL is a domestically produced commercial open-source cryptographic library developed independently by Peking University, which comprehensively covers the functions of national cryptographic algorithms, standards, and secure communication protocols. It supports mainstream operating systems and processors, including mobile platforms, and typical domestic cryptographic hardware such as cryptographic keys and cards. It provides feature-rich command-line tools and various programming interfaces in multiple compiled languages.

Apache AGE: PostgreSQL的图数据库扩展

  • 创建周期:1351 天
  • 开发语言:C
  • 协议类型:Apache License 2.0
  • Star数量:2488 个
  • Fork数量:341 次
  • 关注人数:2488 人
  • 贡献人数:74 人
  • Open Issues数量:394 个
  • Github地址:https://github.com/apache/age.git
  • 项目首页: https://age.apache.org

Apache AGE是PostgreSQL的一个扩展,它增加了图数据库支持,使用户能够在现有的关系数据库上利用图数据库。它经过优化,能够处理复杂的连接图数据,并支持openCypher查询、多个图以及分层图标签组织。该项目旨在通过将PostgreSQL的功能和特性与图模型相结合,提供一个连贯且易于实现的多模型数据库。它的设计简单易用,支持各种平台,并提供不同编程语言的驱动程序。此外,Apache AGE Viewer是一个用户界面,提供数据可视化和探索功能,增强了Apache AGE的能力。

Slurm: 一个高度可扩展的工作负载管理器

  • 创建周期:4608 天
  • 开发语言:C
  • 协议类型:Other
  • Star数量:2190 个
  • Fork数量:604 次
  • 关注人数:2190 人
  • 贡献人数:242 人
  • Open Issues数量:4 个
  • Github地址:https://github.com/SchedMD/slurm.git
  • 项目首页: https://slurm.schedmd.com/

Slurm是一个开源的集群资源管理和作业调度系统,提供对计算节点的独占和/或非独占访问,执行和监视分配节点上的工作的框架,并管理冲突的资源请求。它简单、可扩展、便携、容错和互连不可知,并且仅在Linux下进行了测试。

PlaceHolderKV: 新型开源键值存储

  • 创建周期:5 天
  • 开发语言:C
  • 协议类型:BSD 3-Clause “New” or “Revised” License
  • Star数量:521 个
  • Fork数量:21 次
  • 关注人数:521 人
  • 贡献人数:386 人
  • Open Issues数量:26 个
  • Github地址:https://github.com/placeholderkv/placeholderkv.git

该项目是一个名为PlaceHolderKV的新型开源键值存储,它是Redis项目的一个分支。README目前正在建设中,该项目旨在构建一个新的社区驱动的高性能键值存储。它提供了有关构建、测试、修复构建问题、选择内存分配器、构建TLS支持、运行和安装PlaceHolderKV的信息。

log

zlog是一个高可靠性、高性能、线程安全、灵活、概念清晰的纯C日志函数库。

zlog在效率、功能、安全性上大大超过了log4c,并且是用c写成的,具有比较好的通用性。

zlog有这些特性:

  • syslog分类模型,比log4j模型更加直接了当
  • 日志格式定制,类似于log4j的pattern layout
  • 多种输出,包括动态文件、静态文件、stdout、stderr、syslog、用户自定义输出函数
  • 运行时手动、自动刷新配置文件(同时保证安全)
  • 高性能,在作者的笔记本上达到25万条日志每秒, 大概是syslog(3)配合rsyslogd的1000倍速度
  • 用户自定义等级
  • 多线程和多进程环境下保证安全转档
  • 精确到微秒
  • 简单调用包装dzlog(一个程序默认只用一个分类)
  • MDC,线程键-值对的表,可以扩展用户自定义的字段
  • 自诊断,可以在运行时输出zlog自己的日志和配置状态
  • 不依赖其他库,只要是个POSIX系统就成(当然还要一个C99兼容的vsnprintf)

zlog仓库链接:

https://github.com/HardySimpson/zlog

zlog使用手册:

http://hardysimpson.github.io/zlog/UsersGuide-CN.html

test.c:

#include <stdio.h>
#include "zlog.h"

int main(int argc, char** argv)
{
    int rc;
    zlog_category_t *zc;

    rc=zlog_init("test.conf");
    if (rc) 
    {
        printf("init failed\n");
        return -1;
    }

    zc=zlog_get_category("my_cat");
    if (!zc) 
    {
        printf("get cat fail\n");
        zlog_fini();
        return -2;
    }

    zlog_info(zc, "嵌入式大杂烩");
    zlog_info(zc, "hello, zlog");

    zlog_fini();
    
    return 0;
}

test.conf:

xmake

xmake是一个跨平台的安装(编译)工具。

xmake 是一个基于 Lua 的轻量级跨平台构建工具,使用 xmake.lua 维护项目构建,相比 makefile/CMakeLists.txt,配置语法更加简洁直观,对新手非常友好,短时间内就能快速入门,能够让用户把更多的精力集中在实际的项目开发上。

xmake官网:

https://xmake.io/

1、支持的平台

  • Windows (x86, x64)
  • macOS (i386, x86_64, arm64)
  • Linux (i386, x86_64, cross-toolchains ..)
  • *BSD (i386, x86_64)
  • Android (x86, x86_64, armeabi, armeabi-v7a, arm64-v8a)
  • iOS (armv7, armv7s, arm64, i386, x86_64)
  • WatchOS (armv7k, i386)
  • MSYS (i386, x86_64)
  • MinGW (i386, x86_64, arm, arm64)
  • Cygwin (i386, x86_64)
  • Wasm (wasm32)
  • Cross (cross-toolchains ..)

2、支持的工具链

3、支持的语言

  • C/C++
  • Objc/Objc++
  • Swift
  • Assembly
  • Golang
  • Rust
  • Dlang
  • Fortran
  • Cuda
  • Zig (Experimental)

4、编译测试

多任务并行编译测试:

单任务编译测试:

官网上的内容很丰富,对xmake做了很详细的介绍,感兴趣的小伙伴可以自己去了解学习。

gear-lib

gear-lib是一组通用的C基础库。

  • 全部用POSIX C实现,目标是为了跨平台兼容linux, windows, android, ios。
  • 适用于物联网,嵌入式,以及网络服务开发等场景。

包含如下内容:

gear-lib使用起来很方便,可以作为我们日常开发中的工具库。

gear-lib地址:

https://github.com/gozfree/gear-lib

inih

inih是一个C 语言编写的 INI 文件解析器。

ini 文件是 Initialization File 的缩写,即初始化文件。INI文件由节、键、值组成,注解使用分号表示(;)

例子:

[ip]                ;Section1
ip_addr=192.168.1.103

[test]              ;Section2
name=ZhengN       
num=66  
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "ini.h"

typedef struct
{
    const char* ip_addr;
    const char* name;
    int num;
} configuration;

static int handler(void* user, const char* section, const char* name,
                   const char* value)
{
    configuration* pconfig=(configuration*)user;

    #define MATCH(s, n) strcmp(section, s)==0 && strcmp(name, n)==0
    if (MATCH("ip", "ip_addr")) 
    {
        pconfig->ip_addr=strdup(value);
    } 
    else if (MATCH("test", "name")) 
    {
        pconfig->name=strdup(value);
    } 
    else if (MATCH("test", "num")) 
    {
        pconfig->num=atoi(value);
    } 
    else 
    {
        return 0;  /* unknown section/name, error */
    }

    return 1;
}

int main(int argc, char* argv[])
{
    configuration config;
    config.ip_addr=NULL;  /* set defaults */
    config.name=NULL;
    config.num=0;

    if (ini_parse("ip.ini", handler, &config) < 0) 
    {
        printf("Can't load 'ip.ini'\n");
        return 1;
    }
    printf("Config loaded from 'ip.ini': ip_addr=%s, name=%s, num=%d\n",
        config.ip_addr, config.name, config.num);

    if (config.ip_addr)
        free((void*)config.ip_addr);
    if (config.name)
        free((void*)config.name);

    return 0;
}

queue

queue.h是Linux、FreeBSD中的一个很实用的头文件。这个头文件里全是宏定义操作,所以其不仅可以使用在Linux/嵌入式Linux项目中,也可以使用在单片机项目中。

它使用宏实现了如下数据结构:

  • SLIST:单向无尾链表
  • LIST:双向无尾链表
  • STAILQ:单向有尾链表(可作队列使用)
  • TAILQ:双向有尾链表(可作队列使用)

所有的数据结构都支持如下功能:

  • 在链表头插入节点
  • 在任意节点后插入节点
  • 删除节点
  • 遍历节点

我们可以在Linux系统的如下路径中找到这个头文件:

/usr/include/sys/queue.h

也可以通过如下网址查看:

https://code.woboq.org/userspace/glibc/misc/sys/queue.h.html

/*
 * Singly-linked List definitions.
 */
#define SLIST_HEAD(name, type)         \
struct name {                   \
 struct type *slh_first; /* first element */        \
}

#define SLIST_HEAD_INITIALIZER(head)       \
 { NULL }

#define SLIST_ENTRY(type)          \
struct {              \
 struct type *sle_next; /* next element */     \
}

/*
 * Singly-linked List functions.
 */
#define SLIST_INIT(head) do {         \
 (head)->slh_first=NULL;         \
} while (/*CONSTCOND*/0)

#define SLIST_INSERT_AFTER(slistelm, elm, field) do {   \
 (elm)->field.sle_next=(slistelm)->field.sle_next;   \
 (slistelm)->field.sle_next=(elm);       \
} while (/*CONSTCOND*/0)

#define SLIST_INSERT_HEAD(head, elm, field) do {    \
 (elm)->field.sle_next=(head)->slh_first;     \
 (head)->slh_first=(elm);         \
} while (/*CONSTCOND*/0)

#define SLIST_REMOVE_HEAD(head, field) do {      \
 (head)->slh_first=(head)->slh_first->field.sle_next;  \
} while (/*CONSTCOND*/0)

#define SLIST_REMOVE(head, elm, type, field) do {    \
 if ((head)->slh_first==(elm)) {       \
  SLIST_REMOVE_HEAD((head), field);      \
 }               \
 else {              \
  struct type *curelm=(head)->slh_first;    \
  while(curelm->field.sle_next !=(elm))     \
   curelm=curelm->field.sle_next;     \
  curelm->field.sle_next=\
      curelm->field.sle_next->field.sle_next;    \
 }               \
} while (/*CONSTCOND*/0)

#define SLIST_FOREACH(var, head, field)       \
 for((var)=(head)->slh_first; (var); (var)=(var)->field.sle_next)

/*
 * Singly-linked List access methods.
 */
#define SLIST_EMPTY(head) ((head)->slh_first==NULL)
#define SLIST_FIRST(head) ((head)->slh_first)
#define SLIST_NEXT(elm, field) ((elm)->field.sle_next)

cJSON

https://github.com/DaveGamble/cJSON.git

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。

cJSON是C语言编写的用于解析与组包JSON数据的一个库。

protobuf

https://github.com/protocolbuffers/protobuf

Protocol Buffers,是Google公司开发的一种数据格式,类似于XML能够将结构化数据序列化,可用于数据存储、通信协议等方面。它不依赖于语言和平台并且可扩展性极强。

JSON类型数据可读性很好,但是整个数据包中会带有一些无用的数据,自然会在一定程度上带来通信负担。protobuf是一种相对JSON来说更为轻量的数据格式。

protobuf的优点:

  • 可扩展性强。
  • 消息格式升级和兼容性好
  • 支持跨平台多语言
  • 序列化反序列化速度很快
  • 序列化后体积相比Json和XML很小,适合网络传输

如果文章对你有帮助,麻烦帮忙点赞、收藏、转发,谢谢!


私信回复【嵌入式书籍】,可获取博主精心整理的嵌入式电子书一份

tml+css+js 黑神话悟空网页设计与制作

网站介绍

1、网站程序:主要使用网页三剑客html+css+javaScript实现网页设计与制作,完成网站的功能设计。制作适用于任何浏览器或设备的精美网站。

2、网站素材:搜集或制作适合网页风格和尺寸的图片,追求优质视觉体验。

3、网站文件:网站系统文件种类包含html网页结构文件、css网页样式文件、js网页特效文件、images网页图片文件等。

4、网页编辑:网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、Sublime 、HBuilder、Vscode 、Webstorm、Notepad++ 、Text 等任意编辑软件进行编辑修改等操作)。

5、网站布局:主要采用浮动布局。兼容各大主流浏览器、显示效果稳定。

6、网页效果预览:双击html文件或者拖拽html文件到浏览器打开,即可预览当前网页效果。


网站亮点

1、视觉设计:排版布局极简设计,优质的视觉体验等。

2、动效交互:幻灯效果、入场动画、按钮点击、视差功能、锚点功能、图片画廊功能等。


网站文件目录

(1)index.html:首页html;

(2)style:静态资源目录,存放css网页样式文件、js网页特效文件、images网页图片文件等;

(3)css文件夹:存放网页所有css样式表文件文件;

(4)images文件夹:存放网页所有图片资源文件;

(5)js文件夹:存放网页所有网页特效文件;


适用于课程设计、HTML期末大作业等。