| 項目 | 代碼量 | 核心價值 | 學習重點 |
|---|---|---|---|
| Webbench | < 600 行 | HTTP 壓測工具 | fork() 多進程模型、Socket 編程、命令行解析 |
| Tinyhttpd | 502 行(含註釋) | 極簡 HTTP Server | HTTP 協議解析、請求處理循環、靜態文件服務 |
| cJSON | ~500 行 | JSON 解析器 | 遞歸下降解析、動態內存管理、樹形結構操作 |
| CMockery | < 3K 行 | 單元測試框架 | Mock 機制、函數指針表、測試隔離技術 |
| Libev | ~8K 行 (v4.15) | 高性能事件循環庫 | Reactor 模式、epoll/kqueue 封裝、定時器堆、信號處理 |
| Memcached | ~10K 行 | 分布式緩存系統 | 哈希表、LRU 淘汰、Slab 分配器、二進制協議、多線程同步 |
| Lua 5.1.4 | ~1.5 萬行 | 嵌入式腳本引擎 | 虛擬機設計、垃圾回收、協程、C API、ANSI C 可移植性 |
| SQLite | ~3 萬行 | 嵌入式關係數據庫 | B+樹、SQL 編譯器、事務/ WAL、VFS 抽象層、測試覆蓋率 |
| UNIX V6 | ~1 萬行 | 經典教學級內核 | 進程調度、文件系統、中斷處理、系統調用、設備驅動 |
| NetBSD | 大型專案 | 高度可移植類 Unix 系統 | 機器無關/相關代碼分離、驅動框架、跨平台構建、安全機制 |
Btree、Memcached 的 slabclass、Lua 的 TValue。ctags/cscope 跳轉、gdb 動態調試、clangd 語義分析。Q:有編程基礎想找老師帶入門,下載了源碼不會編譯怎麼辦?
A:學習最終靠自己。先搞定構建系統(Make/CMake/Autotools),閱讀README/INSTALL,遇到具體錯誤再上論壇/StackOverflow 提問。推薦視頻:MIT 6.087、CSAPP 配套課程。
Q:PHP/Java 轉 C,推薦適合初學者的開源項目?
A:從 cJSON、Tinyhttpd 開始,代碼短、邏輯清晰、有即時反饋。SourceForge/GitHub 搜「awesome-c」獲取更多精選。