- 学习编程语言,除了动手写轮子之外,阅读别人的优秀代码,无疑是一个很好的学习方式。本文将使用C语言的开源项目做一整理,供各位大佬参考。
Linux
- Linux 内核最初只是由芬兰人林纳斯·托瓦兹(Linus Torvalds)在赫尔辛基大学上学时出于个人爱好而编写的。
- Linux 是一套免费使用和自由传播的类 Unix 操作系统,是一个基于 POSIX 和 UNIX 的多用户、多任务、支持多线程和多 CPU 的操作系统。
- Linux 能运行主要的 UNIX 工具软件、应用程序和网络协议。它支持 32 位和 64 位硬件。Linux 继承了 Unix 以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。
- 项目地址:Linux
UNIX v6
- UNIX V6 的内核源代码包括设备驱动程序在内约有 1 万行,这个数量的源代码,初学者是能够充分理解的。有一种说法是一个人所能理解的代码量上限为 1 万行,UNIX V6 的内核源代码从数量上看正好在这个范围之内。
- 项目地址:unix
NETBSD
- NetBSD是一个完全开放源代码的类UNIX系统。最初FreeBSD只能运行在PC硬件上,为了FreeBSD能够兼容其他的硬件,便产生了一个FreeBSD的衍生版NetBSD。可以说,NetBSD就是为了提高FreeBSD的可移植性而产生的一个BSD发行版。因此,NetBSD从一开始就支持非常多的硬件架构,包括ia64、Macintosh、i386以及SPARC等,可以说从64位AMD Athlon服务器和桌面系统到手持设备和嵌入式设备,都可以看到NetBSD的影子。
- 项目地址:netbsd
rt-thread
- RT-Thread是一个来自中国的开源物联网操作系统,它提供了非常强的可伸缩能力:从一个可以运行在ARM Cortex-M0芯片上的极小内核,到中等的ARM Cortex-M3/4/7系统,甚至是运行于MIPS32、ARM Cortex-A系列处理器上功能丰富系统。
- 项目地址:rt-thread
TencentOS-tiny
- TencentOS tiny 是腾讯面向物联网领域开发的实时操作系统,具有低功耗,低资源占用,模块化,安全可靠等特点,可有效提升物联网终端产品开发效率。
- 项目地址:TencentOS-tiny
Nginx
- Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,
- Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,在BSD-like 协议下发行。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度、京东、新浪、网易、腾讯、淘宝等。
- 项目地址:nginx
Sqlite
- SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。
- 就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
- 值得一提的是,微信在移动客户端的聊天记录存储使用的是SQLite数据库;
- 项目地址:sqlite
Leveldb/RocksDB
- Leveldb是一个google实现的非常高效的kv数据库,RocksDB功能与其相同,但其内部做了很多完善和改进。两者都是在互联网领域应用广发的开源项目。
- 项目地址:LevelDB
- 项目地址:RocksDB
Redis
- REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统,是跨平台的非关系型数据库。
- Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API。
- Redis 通常被称为数据结构服务器,因为值(value)可以是字符串(String)、哈希(Hash)、列表(list)、集合(sets)和有序集合(sorted sets)等类型。
- 项目地址:redis
memcached
- Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提高动态、数据库驱动网站的速度。Memcached基于一个存储键/值对的hashmap。
- 其守护进程(daemon )是用C写的,但是客户端可以用任何语言来编写,并通过memcached协议与守护进程通信。
- 项目地址:memcached
cJSON
- cJSON 是一个 JSON 编解码器,非常轻量级,C 文件只有 500 多行,速度也非常理想。cJSON 也存在几个弱点,虽然功能不是非常强大,但 cJSON 的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的 C 语言项目进行学习。
- 项目地址:cJSON
Webbench
- Webbench是一个在 Linux 下使用的非常简单的网站压测工具,它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟 3 万个并发连接去测试网站的负载能力,使用C语言编写, 代码简洁,源码加起来不到 600 行。
- 项目地址:Webbench
Tinyhttpd
- Tinyhttpd 是J. David Blackstone在1999年写的一个不到 500 行的超轻量型 Http Server,用来学习非常不错,可以帮助我们真正理解服务器程序的本质。
- 项目地址:Tinyhttpd
Althttpd
- SQLite 作者最新开源的 Web 服务器Althttpd,是一个简易的网络服务器,https://sqlite.org/ 自从2004年开始就运行于该服务器之上。Althttpd 力求简单、安全和低资源 消耗。
- 项目地址:althttpd
Cmockery
- Cmockery是Google发布的用于C单元测试的一个轻量级的框架。它很小巧,对其他开源包没有依赖,对被测试代码侵入性小。
- 项目地址:Cmockery
libevent
- Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。
- Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomit、 Nylon、 Netchat等等。
- 项目地址:libevent
libev
- Libev是一个全功能和高性能的事件循环库, 由Marc Lehmann和Emanuele Giaquinta创建. 它以GPLv2协议进行发布, 并且在目前为止的多个行业内广泛被应用在各类生成环境中;
- GVPE虚拟专用以太网、rxvt-unicode、auditd、Deliantra MORPG服务器和客户端以及许多其他程序. 甚至鼎鼎大名的node.js也曾经在早期的版本内嵌入并使用Libev, 后来才使用自行编写的Libuv.
- 项目地址:libev
libuv
- Libuv是一个跨平台的的基于事件驱动的异步io库。但是他提供的功能不仅仅是io,包括进程、线程、信号、定时器、进程间通信等。下面是来自官网对Libuv架构的介绍图。
- 项目地址:libuv
libhv
- libhv是一个类似于libevent、libev、libuv的跨平台网络库,提供了更简单的接口和更丰富的协议。
- 项目地址:libhv
Lua
- Lua 是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于 1993 年开发的,该小组成员有:Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo。
- Lua 是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
- 项目地址:Lua
FastDFS
- FastDFSFastDFS是一款轻量级的开源分布式文件系统,功能包括:文件存储、文件同步、文件上传、文件下载等,解决了文件大容量存储和高性能访问问题。特别适合以文件为载体的在线服务,如图片、视频、文档服务等等。
- 项目地址:FastDFS
FFmpeg
- 一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。
- 项目地址:ffmpeg
snort
- 在1998年,Martin Roesch先生用C语言开发了开放源代码(Open Source)的入侵检测系统Snort。直至今天,Snort已发展成为一个多平台(Multi-Platform),实时(Real-Time)流量分析,网络IP数据包(Pocket)记录等特性的强大的网络入侵检测/防御系统(Network Intrusion Detection/Prevention System),即NIDS/NIPS.Snort符合通用公共许可(GPL——GNU General Pubic License),在网上可以通过免费下载获得Snort。
- 项目地址:snort