Github开源项目之:C
导航
- Github开源项目之:C
- Github开源项目之:C#
- Github开源项目之:C++
- Github开源项目之:CSS
- Github开源项目之:GO
- Github开源项目之:Java
- Github开源项目之:JavaScript
- Github开源项目之:Kotlin
- Github开源项目之:Objective-C
- Github开源项目之:Python
- Github开源项目之:Ruby
- Github开源项目之:Rust
- Github开源项目之:Swift
- Github开源项目之:PHP
- Github开源项目之:人工智能
- Github开源项目之:开源书籍
- Github开源项目之:其他相关
内容来源于网络
前言
分享Github开源项目,在玩的过程中学习,2023年每天的目标就是研究几个项目,寻找点乐趣。
开源项目
001.BaiduPCS
C 写的百度网盘命令行工具,在线文档
002.wrk
现代 HTTP 基准测试(实现对一类测试对象的某项性能指标进行定量的和可对比的测试)工具,使用示例:
1 | wrk -t12 -c400 -d30s http://127.0.0.1:8080/index.html //Input |
1 | //Output |
003.tbox
一个用 C 语言实现的跨平台开发库,用于解决不同操作系统的兼容问题,并且充分利用了各个平台独有的一些特性进行优化。中文说明
004.awesome-c-cn
C 资源大全中文版,包括了:构建系统、编译器、数据库、加密、初中高的教程/指南、书籍、库等。
005.ip2region
IP 到地区的映射库,速度快(毫秒级)、准确性高(99.9%),妈妈再也不用担心我的 IP 地址定位,示例代码:
通过 xdb_searcher search 命令来测试对 ip2region.xdb 的查询:
1 | ➜ c git:(c_binding) ✗ ./xdb_searcher search |
使用默认的 data/ip2region.xdb 进行查询测试:
1 | ➜ c git:(c_binding) ✗ ./xdb_searcher search --db=../../data/ip2region.xdb --cache-policy=vectorIndex |
006.ffmpeg-libav-tutorial
FFmpeg libav tutorial - learn how media works from basic to transmuxing, transcoding and more.
007.swipe-workspace
基于 libinput 实现 Linux 系统下通过二指滑动控制面板,切换屏幕的程序。虽然功能简单,且不支持全平台。但是十分推荐这种自己动手实现一个实用的功能这种行为,这是非常有成就感的事情
008.Tinyhttpd
一个不到 500 行的超轻量型 HTTP Server,可以用来理解服务器程序的原理和本质。快看 C语言 的入门级项目!
009.reading-code-of-nginx-1.9.2
nginx-1.9.2 源码通读分析注释,带详尽函数中文分析注释以及相关函数流程调用注释
010.db_tutorial
用 C 从零创建一个简单的数据库
011.kcp
纯算法实现的快速可靠协议。能以比 TCP 浪费 10%-20% 的带宽为代价,换取平均延迟降低 30%-40%,且最大延迟降低 3 倍的传输效果
012.C
各种基础算法、数据结构的 C 语言实现。这个TheAlgorithms 开源组织的项目包含基础算法的各种编程语言的示例代码
013.obs-studio
由 OBS 项目维护的免费开源流媒体和录制程序。该程序支持 Windows 7、macOS 10.10、Ubuntu 14.04 操作系统。可用于直播和屏幕录制,下载地址
014.libaco
一个极速、轻量级、C语言非对称协程库。中文文档,项目介绍:
- 生产级别的 C 协程库
- 核心实现不超过 700 行代码,实现了一个协程库应该有的全部功能
- 在 AWS c5d.large 机器上的性能测试,一次协程间上下文切换仅耗时 10 ns (独立执行栈)
- 一千万个协程并发执行仅消耗2.8GB的物理内存
015.redis-3.0-annotated
黄健宏 在编写《Redis 设计与实现》期间,阅读 Redis 3.0 源码过程中写的注释。相信对于想要阅读 redis 源码的同学,会有很大的帮助
016.nvtop
NVIDIA GPU 类 (h)top 的任务监控工具,它可以监控多个 GPU 并以熟悉的方式(类 htop 方式)打印有关它们的信息
017.os-tutorial
(英文)如何从头开始创建操作系统
018.json-tutorial
由Milo Yip发起的用 C 从零开始编写 JSON 库教程。
大纲:
- 启程:编译环境、JSON 简介、测试驱动、解析器主要函数及各数据结构。
- 解析数字:JSON number 的语法
- 解析字符串:使用 union 存储 variant、自动扩展的堆栈、JSON string 的语法、valgrind
- Unicode:Unicode 和 UTF-8 的基本知识、JSON string 的 unicode 处理
- 解析数组:JSON array 的语法
- 解析对象:JSON object 的语法、重构 string 解析函数
- 生成器:JSON 生成过程、注意事项。练习完成 JSON 生成器
- 访问与其他功能:JSON array/object 的访问及修改
019.ttygif
录制终端。
020.SuperWeChatPC
这是一个超级微信电脑客户端。没错,是超级!因为它不仅是一个微信电脑客户端,还支持以下功能:
- 无限多开
- 消息防撤销
- 语音消息备份
- 等等
项目里还有相关技术内幕的文章链接,快前去学习吧
021.TDengine
一个专门针对物联网等行业以及应用监控进行设计优化的大数据平台。它的数据库插入、查询操作比其它的数据库快了 10 倍!消耗的成本也非常低,和其他典型的此类解决方案相比。TDengine 只需要不到 1/5 的计算资源,它还提供了 Java、C/C++、Python、Go、RESTful API 等用于开发的接口。还在为数据的写入、读取、计算的性能发愁吗?有了它相信你的头发存活率会大大提高
022.tmux
一个终端复用工具,可极大的提高工作效率。
- 提供了强劲的、易于使用的命令行界面
- 可横向和纵向分割窗口
- 窗格可以自由移动和调整大小,或直接利用四个预设布局之一
- 可在多个缓冲区进行复制和粘贴
- 可通过交互式菜单来选择窗口、会话及客户端
- 等等
023.smartdns
一个运行在本地的 DNS 服务器。能够提高网络访问速度等诸多妙用,架构图如下:
使用官方安装源:
系统 | 安装方式 | 说明 |
---|---|---|
openwrt | opkg update opkg install luci-app-smartdns opkg install smartdns |
22.03之后的系统。软件源 |
ddwrt | 官方最新固件service页面->SmartDNS Resolver->启用。 | 选择界面参考 |
debian | apt-get install smartdns |
|
entware | ipkg update ipkg install smartdns |
软件源路径 |
024.xmake
一个基于 Lua 的轻量级跨平台自动构建工具。支持在各种主流平台上构建项目,主要用于解决 C/C++ 项目的跨平台构建,同时支持与其他语言的混合编译。工程配置语法简单易读,对初学者友好、上手方便
025.linq4c
如果你想在 C 中使用隔壁 C# 的 linq 方法,那么不妨来使用这个项目!这是它的 C 语言版。实现了 linq 的大部分方法(60+)。
Example using callbacks:
1 |
|
026.netdata
一款免费开源的 Linux 系统性能实时监控工具。它易于安装、占用资源少、功能强大,支持监控多种服务
027.scrcpy
一款可以用电脑显示并控制 Android 手机的开源工具。连接方便使用方便,手机无需 root、无需安装任何应用。支持 USB、Wi-Fi 两种方式连接,支持 Windows、macOS、Linux 三种操作系统。注意电脑端需要安装 adb 工具
028.baulk
一个用 C 编写的极简 Windows 包管理器。易于使用、免安装、不修改系统环境变量,能够和 Windows Terminal 集成、添加到右键菜单。可以说是一个精简版的 Scoop
029.LCUI
一个使用 C 开发的图形界面开发库。可借助 XML 和 CSS 构建简单的跨平台桌面应用,提供与网页类似的开发体验。因此,你可以使用它轻松做出十分漂亮的界面。与 Electron 不同,它只是一个应用了部分 Web 技术的传统 GUI 开发库
使用 LCUI CLI安装:
1 | # 安装 lcui-cli 和 lcpkg |
030.goaccess
实时 Web 日志分析工具
031.htop
交互式进程查看工具,可代替 top 命令。
032.freebsd-src
FreeBSD 操作系统源码仓库。
033.raspberry-pi-os
基于树莓派的操作系统开发教程。
034.SimpleKernel
一个用来练手的简单内核项目。提供了各个阶段完成度不同的内核,可以选择从自己喜欢的地方开始
035.libevent
C 语言实现的轻量级、高性能事件通知库。基于事件驱动,支持多种 I/O 多路复用技术:epoll、poll、select、kqueue 等。libevent 就是这些系统基础库的统一封装,提供更高级的 API 并解决跨平台的问题
036.switch-lan-play
让您和您的朋友像在局域网中一样玩 switch 游戏。教程
037.DungeonRush
元气贪吃蛇游戏。作者受到元气骑士的启发,基于贪吃蛇进行一些玩法上的创新。
038.libhv
一个跨平台、简单易用的非阻塞 IO 事件循环库。用它可以快速的编写 HTTP 客户端/服务端,可提供高性能的 httpd 服务。项目模块划分清晰,代码可读性高,快去看下源代码吧。
Getting Started:
run run ./getting_started.sh
:
1 | git clone https://github.com/ithewei/libhv.git |
039.myscan
开源的多线程 socket 扫描 IP 端口的程序。
命令行下:
1 | myscan -p Port1[,Port2,Port3...] [-t Thread](default 10) [-d] (DEBUG) StartIp EndIp |
Example:
1 | myscan -p 80 192.168.1.1 192.168.1.254 |
040.the_silver_searcher
比 ack 更快的命令行搜索工具。速度快、功能强大、使用简单,支持 Linux、Windows、macOS 操作系统,还能够整合到 Vim 和 Emacs 等编辑器
1 | ack test_blah ~/code/ 104.66s user 4.82s system 99% cpu 1:50.03 total |
041.toybox
该项目将 200 多个常用的 Linux 命令行工具,做成一个可执行文件,从而可以让 Android 这种原本不支持 Linux 命令的系统,也得以用上 ls、find、ps 等命令,还可以用于快速构建最小的 Linux 环境。
042.WindTerm
支持 SSH/Telnet/Serial/Shell/Sftp 的终端工具。
043.minilisp
用 1000 行 C 语言写的 Lisp 解释器。实现了整数、符号、局部变量、条件语句、宏和垃圾回收等功能,为了让读者更好地理解项目,代码中包含了丰富的注释
1 | (println 3) ; prints "3" |
044.mpv
功能强大、免费开源、支持多平台的极简播放器。底层采用了 MPlayer、mplayer2 和 FFmpeg 等开源项目,支持多种音视频格式、高清视频、GPU 解码、自定义等功能,追求极简的命令行启动+快捷键操作方式,让它成为了技术爱好者的首选视频播放器
045.quadsort
一种比快速排序快,稳定的归并排序算法。项目包含原理讲解、C 语言实现、性能对比和排序过程
046.daytripper
上班摸鱼神器之激光绊脚器。它分为发射器和接收器两部分,设置好后会在有人路过绊脚器时,自动触发隐藏桌面、切换应用等操作
047.tinyssh
极简 SSH 服务器。为了便于学习仅保留了基础功能,而且抛弃了较旧的加密算法。该项目的学习价值大于实用价值,适合对 SSH 和加密知识感兴趣的小伙伴
048.ngx_waf
一个 Nginx 防火墙模块。
支持功能:
- 支持 IPV4、IPV6 和 IP 段黑白名单
- CC 防御即自动拉黑 IP 一段时间
- 支持 GET、POST、URL、Cookie 等黑名单(正则)
049.TIC-80
复古游戏引擎模拟器。TIC-80 支持 Windows、Linux、Mac 等主流平台,通过它你可以运行多种复古小游戏,觉得没意思?它不仅可以玩游戏还可以制作游戏,支持多种编程语言,还有地图、声音编辑器等,就是一个回到过去的“神奇迷你电脑”
050.acwj
教你写 C 语言编译器的实战教程。教程注重实战循序渐进,一步步教你如何用 C 语言写一个可以自己编译自己(自举)、能够在真正的硬件上运行的 C 语言编译器
051.zstd
快速、无损的数据压缩算法 Zstandard 的实现。Zstd 的压缩比接近 lzma、lzham 和 ppmx,并且比 lza 或 bzip2 性能更好。在相似的压缩比情况下,它解压缩的速度比其他的算法都要快。
052.rtty
能够通过 Web 登录 Linux 终端的开源项目。采用 C 语言实现,算上依赖库体积不到 100KB,可用于嵌入式 Linux 设备。拥有 Web 管理界面,用此项目可以方便地远程维护 Linux 设备
053.si78c
用 C 语言实现的《太空侵略者》命令行游戏
054.mgba
用 C 语言实现的 GBA 模拟器。唤起你童年回忆的同时,还能边学边玩,然后再约上三两好友一起看看源码和实现,快乐就是这么简单
055.X-TRACK
开源的 GPS 自行车码表。功能齐全且拥有美观的界面,支持离线地图、显示轨迹等功能。在线观看
056.discount
一个用 C 语言编写的 Markdown 实现,可以轻松将 MD 文档转换为 HTML 格式
057.HEX-LINK
自制电脑游戏的体感设备。该项目包含制作时需要的硬件设计和全部源码
1 | . |
058.cpufetch
获取 CPU 信息的命令行工具
059.bytehound
更强大的 Linux 内存分析工具。它能够显示内存变化曲线、占用详情、完整的堆栈记录等信息,有助于解决内存泄漏等问题
060.nnn
几乎不需要配置就能用的终端文件管理工具。它运行仅需极少的内存但功能却不少,支持文件实时预览、搜索、批量操作文件、排序等,不仅如此它还能作为插件整合进 Vim
061.ucore
清华大学操作系统课程,配套实验项目。推荐给有计算机结构原理、C 和汇编、数据结构基础并对操作系统感兴趣的同学,项目中包含教学视频、练习题、实验指导书等
062.fontforge
免费开源的字体编辑器。适用于 Windows、macOS、Linux 的编辑字体桌面工具,支持创建和编辑多种格式的字体,可用来构建自己的字体。
063.micropython
可运行在单片机上的 Python。众所周知 Python 是一门语法非常简单的编程语言,如果能用 Python 操控硬件岂不美哉!该项目就是单片机上的“迷你” Python,通过它就可以用 Python3 进行单片机开发了,大大地降低了硬件开发的入门门槛。
064.TencentOS-tiny
腾讯开源的物联网终端操作系统。精简的实时操作系统(RTOS)内核,可移植到多种主流单片机,内部集成了多种物联网协议栈,具有占用资源少、低功耗、模块化、易移植、安全等特点。
065.lvgl
美观易用的轻量级嵌入式系统图形库
- 拥有丰富的图形组件:按键、图表、图片等
- 支持多种输入设备:触摸屏、键盘、按键等
- 最低资源占用:64 kB ROM、16 kB RAM
- 不依赖特定的硬件平台,可在多种显示屏上运行
- 支持多语种:中文、韩文、阿拉伯文等
- 丰富详细的示例
066.uthash
为 C 语言提供哈希表的库。由于 C 语言中没有类似字典的数据结构,该库提供了哈希表常见的查询、插入、删除、排序等函数。使用方法简单,仅需引入一个头文件
1 |
|
067.warpd
用键盘代替鼠标的工具。拥有多种操作模式比如方向键移动鼠标和区域选择,但仅支持 Linux 和 macOS 系统
068.EasyLogger
超轻量级 C/C++ 日志库。占用资源少适合物联网和单片机等项目,功能简单容易上手,能够通过插件形式扩展功能。特性:
- 支持终端、文件、串口、Flash 等多种输出方式
- 支持多种操作系统
- 线程安全
- 不同颜色显示
069.foolrenderer
用 C 语言从零实现的软件渲染器。不用图形 API 仅用几千行 C 代码,实现了一套类似 OpenGL 的基本图形功能,以及应用于游戏开发的实时渲染技术,如阴影、切线空间法线映射、基于物理的材质系统等。该项目包含丰富的注释和数学计算推导过程的说明,可用于帮助理解和学习 GPU 的基本工作原理、基础渲染知识和着色器原理。
070.unicorn
轻量级的多平台、多架构 CPU 仿真器框架。基于 QEMU 开发的 CPU 模拟器,多用于逆向、执行恶意代码等。特点:
- 多架构:ARM、ARM64、RISC-V、TriCore 等
- 多种编程语言:Python、Rust、Java、Go、JS 等
- 支持各种级别的细粒度检测
071.hashcat
一款强大的密码恢复工具。破解速度超快支持多种算法,适用于 Linux、macOS 和 Windows 操作系统
1 | 安装:brew install hashcat |
072.reptyr
能够把旧终端运行中的程序,迁移到新终端窗口的实用工具
073.entr
在文件有改动时自动触发任意命令的工具。采用 kqueue 或 inotify 事件通知接口监听文件改动事件,避免轮询造成的资源浪费,可用于实现自动编译、重启、测试、同步等功能
1 | ./configure |
074.FreeRDP
完全免费的远程桌面管理工具。此项目为远程桌面协议(RDP)的一个开源实现,通过它可以轻松实现 macOS 或 Linux 远程操作 Windows 桌面系统反之亦可,使用起来十分方便和流畅。下载地址
075.open-gpu-kernel-modules
英伟达开源的 Linux GPU 内核驱动。
076.ServerStatus
多服务器云监控。轻松监控多台服务器状态的工具,用于解决多个不同平台下的服务器状态监控问题
077.sioyek
免费开源的 PDF 阅读器。支持交互式快速搜索文档,而且就算文档中的引用没有链接也可以直接跳转,特别适合 PC 端阅读和研究论文、技术文档等
078.masscan
超快的 IP 端口扫描工具。异步的 TCP 端口扫描器,特点就是快。最快能在 5 分钟内扫描完整个互联网,但要小心别把本机打挂了。
1 | masscan 10.0.0.0/8 -p80 --banners --source-ip 192.168.1.200 |
079.sysbench
基于 LuaJIT 的可编写脚本的多线程基准测试工具。多用于数据库基准测试的命令行工具,经常出现在各种知名数据库的性能对比报告中。支持丰富的测试选项,比如表数量、数据条数、生成只读 SQL 等。
080.gb-studio
简单好玩的 Game Boy 游戏制作工具。这是一款可视化游戏构建工具。无需编程基础即可通过拖拽的方式,快速制作出复古风格的 Game Boy 游戏。不仅支持导出游戏 ROM,还可以直接构建成在线游戏。
081.jq
轻快的命令行 JSON 处理器。JSON 作为最常见的序列化格式,日常开发中经常会遇到。这个项目可以通过简单的命令对 JSON 数据进行格式化、过滤等操作,还支持直接解析接口的 JSON 数据,十分灵活和方便。
082.libvips
极快的多线程图像处理库。具有占用内存小、处理速度快等特点的图像处理底层库。它能够处理多种图像和像素格式,为了使用方便不仅支持命令行调用,官方还提供了 Ruby、Python 等多种编程语言的 SDK。
083.acl
一款跨平台的网络通信库和服务器框架。它既可以做网络通信的客户端,也可以编写服务器端,支持 HTTP、SMTP、ICMP、MQTT、Redis、Memcache 多种常见协议,以及 XML、JSON、BASE64 等编码格式。
- lib_acl:最基础的库
- lib_protocol:实现了 HTPP 协议及 ICMP/PING 协议
- lib_fiber:该库为支持协程库,直接 hook 系统 read/write 等 API,与 epoll 配合支持高并发网络编程
084.CPU-X
一款显示电脑 CPU、主板等信息的免费工具。能够显示设备的 CPU、主板、内存、显卡、操作系统等信息,支持 GUI 和命令行两种启动方式,适用于 Linux 和 FreeBSD 操作系统。
085.gifsicle
压缩和编辑 GIF 图片的工具。它是一款体积小、功能强大的 GIF 图片处理工具,不仅可以压缩 GIF 图片,还支持合并多个 GIF、导出所有帧、查看图片信息、减少帧数、设置循环次数、延迟、编辑某一帧等功能。
1 | brew install gifsicle //安装 |
086.ecapture
一款无需 CA 证书即可抓取 HTTPS 明文的工具。该项目基于 eBPF 技术实现了 TLS 加密的明文捕获,可用于 MySQL 数据库的查询审计、bash 命令捕获等场景,仅支持 Linux 和 Android 系统。
087.FSHistory
最早的微软模拟飞行游戏。该项目提供了 1982 年发行的怀旧游戏《微软模拟飞行》,支持在线试玩、共有 4 个版本可供选择。
088.iodine
一款可快速创建 DNS 隧道的工具。该项目包含 C 语言写的 DNS 隧道服务器和客户端,可快速搭建 DNS 隧道传输 IPv4 数据,常用于绕过防火墙等场景。因为一般情况下防火墙的 DNS 端口是打开的,所以将流量伪装成 DNS 数据包,就可以突破防火墙限制啦。
089.tinyriscv
从零开始写 RISC-V 处理器。该项目是采用 Verilog 语言实现一个单核 32 位的小型 RISC-V 处理器核,包含全部代码和详细的教程。RISC-V 是一种开源指令集架构,它允许任何人设计、制造和销售 RISC-V 芯片和软件。
090.cockpit
基于 Web 的服务器图形界面。这是一款开源的服务器管理工具,让你可以通过 Web 界面轻松管理 Linux 服务器,支持配置防火墙、Web 终端、容器管理、查看系统日志等功能。
091.chibicc
迷你 C 编译器。虽然它只是一个玩具级的编译器,但是实现了大多数 C11 特性,而且能够成功编译几十万行的 C 语言项目,其中包括 Git、SQLite 等知名项目。而且它项目结构清晰、每次提交都是精心设计、代码容易理解,对编译器感兴趣的同学可以从第一个提交开始学习
092.h2o
高性能 HTTP 服务器。相较于传统 Web 服务器,它充分利用了 HTTP/2 的资源加载优先级和服务器推送技术,所以在静态文件方面性能明显优于 Nginx 服务器
持续更新中…