Tinyhttpd
tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。建议源码阅读顺序: main -> startup -> accept_request -> execute_cgi,通晓主要工作流程后再仔细把每个函数的源码看一看。tinyhttpd实现原理流程图:
源码编译以后运行,然后在浏览器中访问:
下载链接:http://sourceforge.net/projects/tinyhttpd/
cJSON
cJSON是一个ANSI C中的超轻量级JSON解析器,代码量大概3000多行,仅有一个.h文件,一个.c文件,速度也非常理想。它是由纯C(ANSI C89)实现的,跨平台性较好。
cJSON库在使用的时候只需要如下两步:将cJSON.c(或者库文件)和cJSON.h添加到项目中即可;如果在命令行中进行链接还需要加上-lm表示链接math库。
cJSON使用cJSON struct数据类型表示JSON数据:
/* The cJSON structure: */typedef struct cJSON{ struct cJSON *next; struct cJSON *prev; struct cJSON *child; int type; char *valuestring; /* writing to valueint is DEPRECATED, use cJSON_SetNumberValue instead */ int valueint; double valuedouble; char *string;} cJSON;
下载链接:https://github.com/DaveGamble/cJSON
Libev
libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。libev包含大量新特性,它是继lievent和Event perl module之后的一套全新网络库。它追求的目标:速度更快,bug更少,特性更多,体积更小。 它和libevent很像,按照作者的介绍,可以作为libevent的替代者,能够提供更高的性能,且并不需要复杂的配置。示例程序:
// a single header file is required#include #include // for puts // every watcher type has its own typedef'd struct// with the name ev_TYPEev_io stdin_watcher;ev_timer timeout_watcher; // all watcher callbacks have a similar signature// this callback is called when data is readable on stdinstatic voidstdin_cb (EV_P_ ev_io *w, int revents){ puts ("stdin ready"); // for one-shot events, one must manually stop the watcher // with its corresponding stop function. ev_io_stop (EV_A_ w); // this causes all nested ev_run's to stop iterating ev_break (EV_A_ EVBREAK_ALL);} // another callback, this time for a time-outstatic voidtimeout_cb (EV_P_ ev_timer *w, int revents){ puts ("timeout"); // this causes the innermost ev_run to stop iterating ev_break (EV_A_ EVBREAK_ONE);} intmain (void){ // use the default event loop unless you have special needs struct ev_loop *loop = EV_DEFAULT; // initialise an io watcher, then start it // this one will watch for stdin to become readable ev_io_init (&stdin_watcher, stdin_cb, /*STDIN_FILENO*/ 0, EV_READ); ev_io_start (loop, &stdin_watcher); // initialise a timer watcher, then start it // simple non-repeating 5.5 second timeout ev_timer_init (&timeout_watcher, timeout_cb, 5.5, 0.); ev_timer_start (loop, &timeout_watcher); // now wait for events to arrive ev_run (loop, 0); // break was called, so exit return 0;}
下载链接:https://github.com/enki/libev
Memcached
Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。
memcached具有多种语言的客户端开发包,包括:Perl/PHP/JAVA/C/Python/Ruby/C#/MySQL/
下载地址:http://memcached.org/
Lua
Lua 是一个小巧的脚本语言。作者是巴西人。该语言的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替XML,Ini等文件格式,并且更容易理解和维护。
Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。
一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。这一切都决定了Lua是作为嵌入式脚本的最佳选择。
Lua的源代码在任何支持ANSI C编译器的平台上都可以轻松编译通过,加上空行和注释的代码量在1.5万行左右。
在线参考手册:http://tool.oschina.net/apidocs/apidoc api=lua
下载地址:http://www.lua.org/
SQLite
SQLite 是一个软件库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。SQLite 是在世界上最广泛部署的 SQL 数据库引擎, 其特点是高度便携、使用方便、结构紧凑、高效、可靠。SQLite 源代码不受版权限制,代码量大概在3万行左右。我自己在平时的项目开发中也经常使用sqlite3数据库,方便快捷,简单好用,非常推荐。
下载地址:https://www.sqlite.org/index.html
CMockery
cmockery是google发布的用于C单元测试的一个轻量级的框架。它很小巧,对其他开源包没有依赖,对被测试代码侵入性小。cmockery的源代码行数不到3K,你阅读一下will_return和mock的源代码就一目了然了。主要特点:
免费且开源,google提供技术支持;轻量级的框架,使测试更加快速简单;避免使用复杂的编译器特性,对老版本的编译器来讲,兼容性好;并不强制要求待测代码必须依赖C99标准,这一特性对许多嵌入式系统的开发很有用
下载链接:https://github.com/google/cmockery
UNIX v6
虽然 UNIX V6 已经是 1975 年的系统了,但是其是现代操作系统的鼻祖,所以说是初学者最好的研究对象。UNIX V6 的内核源代码包括设备驱动程序在内约有1万行,并且还有很多的书籍专门进行UNIX V6的源码剖析,讲的非常详细,大家可以对照着书籍进行源码的阅读,能达到事半功倍的效果。推荐书籍《莱昂氏UNIX源代码分析》,该书最早于1976年在作者当时所在的澳大利亚新南威尔士大学内部流通,但是由于有关公司希望保守在UNIX内核方面的商业机密,该书多年来从未正式出版。但本书一直受到UNIX黑客的关注,私下广为流传于世,是一部杰出、经典之作。在各方有识之士的努力下,该书终于于1996年正式出版。全书语言简洁、透彻;作为一本自学UNIX的教材,二十多年来一直鼓舞和激励着计算机和高级操作系统方面的专业人员和学生。
这本书由上、下两篇组成。上篇为UNIX V6的源代码,下篇是莱昂先生对UNIX V6源代码的详细分析。本书语言简洁、透彻,曾作为未公开出版物广泛流传了二十多年,是一部杰出经典之作。本书适合UNIX操作系统编程人员、大专院校师生学习参考使用。注意这不是广告,只是百度里的介绍。
下载地址:http://minnie.tuhs.org/cgi-bin/utree.pl file=V6
NETBSD
NetBSD是一个免费的,具有高度移植性的 UNIX-like 操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从 64bit alpha 服务器到手持设备和嵌入式设备。NetBSD计划的口号是:”Of course it runs NetBSD”。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。
下载地址:http://www.netbsd.org/