嵌入式 十个最值得阅读学习的C开源项目代码

2023-11-09

  1. Webbench

Webbench是一个在linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。

下载链接:http://home.tiscali.cz/~cz210552/webbench.html

2. Tinyhttpd

tinyhttpd是一个超轻量型Http Server,使用C语言开发,全部代码只有502行(包括注释),附带一个简单的Client,可以通过阅读这段代码理解一个 Http Server 的本质。

下载链接:http://sourceforge.net/projects/tinyhttpd/

3. cJSON

cJSON是C语言中的一个JSON编解码器,非常轻量级,C文件只有500多行,速度也非常理想。

cJSON也存在几个弱点,虽然功能不是非常强大,但cJSON的小身板和速度是最值得赞赏的。其代码被非常好地维护着,结构也简单易懂,可以作为一个非常好的C语言项目进行学习。

项目主页: http://sourceforge.net/projects/cjson/

4. CMockery

cmockery是google发布的用于C单元测试的一个轻量级的框架。它很小巧,对其他开源包没有依赖,对被测试代码侵入性小。cmockery的源代码行数不到3K,你阅读一下will_return和mock的源代码就一目了然了。

主要特点:

免费且开源,google提供技术支持;

轻量级的框架,使测试更加快速简单;

避免使用复杂的编译器特性,对老版本的编译器来讲,兼容性好;

并不强制要求待测代码必须依赖C99标准,这一特性对许多嵌入式系统的开发很有用

下载链接:http://code.google.com/p/cmockery/downloads/list

5. Libev

libev是一个开源的事件驱动库,基于epoll,kqueue等OS提供的基础设施。其以高效出名,它可以将IO事件,定时器,和信号统一起来,统一放在事件处理这一套框架下处理。基于Reactor模式,效率较高,并且代码精简(4.15版本8000多行),是学习事件驱动编程的很好的资源。

下载链接:http://software.schmorp.de/pkg/libev.html

6. Memcached

Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而提供动态数据库驱动网站的速度。Memcached 基于一个存储键/值对的 hashmap。Memcached-1.4.7的代码量还是可以接受的,只有10K行左右。

下载地址:http://memcached.org/

7. Lua

Lua很棒,Lua是巴西人发明的,这些都令我不爽,但是还不至于脸红,最多眼红。

让我脸红的是Lua的源代码,百分之一百的ANSI C,一点都不掺杂。在任何支持ANSI C编译器的平台上都可以轻松编译通过。我试过,真是一点废话都没有。Lua的代码数量足够小,5.1.4仅仅1.5W行,去掉空白行和注释估计能到1W行。

下载地址:http://www.lua.org/

8. SQLite

SQLite是一个开源的嵌入式关系数据库,实现自包容、零配置、支持事务的SQL数据库引擎。 其特点是高度便携、使用方便、结构紧凑、高效、可靠。足够小,大致3万行C代码,250K。

下载地址:http://www.sqlite.org/ 。

9. UNIX v6

UNIX V6 的内核源代码包括设备驱动程序在内 约有1 万行,这个数量的源代码,初学者是能够充分理解的。有一种说法是一个人所能理解的代码量上限为1 万行,UNIX V6的内核源代码从数量上看正好在这个范围之内。看到这里,大家是不是也有“如果只有1万行的话没准儿我也能学会”的想法呢?

另一方面,最近的操作系统,例如Linux 最新版的内核源代码据说超过了1000 万行。就算不是初学者,想完全理解全部代码基本上也是不可能的。

下载地址:http://minnie.tuhs.org/cgi-bin/utree.pl?file=V6

10. NETBSD

NetBSD是一个免费的,具有高度移植性的UNIX-like操作系统,是现行可移植平台最多的操作系统,可以在许多平台上执行,从64bit alpha服务器到手持设备和嵌入式设备。NetBSD计划的口号是:”Of course it runs NetBSD”。它设计简洁,代码规范,拥有众多先进特性,使得它在业界和学术界广受好评。由于简洁的设计和先进的特征,使得它在生产和研究方面,都有卓越的表现,而且它也有受使用者支持的完整的源代码。许多程序都可以很容易地通过NetBSD Packages Collection获得。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌入式 十个最值得阅读学习的C开源项目代码 的相关文章

  • (二叉树)从中序和后序遍历构造树

    题目描述 根据一棵树的中序遍历与后序遍历构造二叉树 注意 你可以假设树中没有重复的元素 例如 给出 中序遍历 inorder 9 3 15 20 7 后序遍历 postorder 9 15 7 20 3 返回如下的二叉树 3 9 20 nu
  • 交换a,b, 不使用中间变量

    第一种方法 a a b b a b a a b printf a d b d n a b 第二种方法 swap69 a b a b printf a d b d n a b void swap69 int a int b int pa in

随机推荐

  • 黑盒测试与白盒测试各自的优缺点

    黑盒测试的优点 1 比较简单 不需要了解程序内部的代码及实现 2 与软件的内部实现无关 3 从用户角度出发 能很容易的知道用户会用到哪些功能 会遇到哪些问题 4 基于软件开发文档 所以也能知道软件实现了文档中的哪些功能 5 在做软件自动化测
  • 使用 husky 进行Git提交前的代码校验和 commit msg检查

    husky 是一个 Git Hooks 工具 借助 husky 我们可以在 git 流程的不同生命周期进行一些自动化操作 本文主要介绍提交前 eslint 校验和提交时 commit 信息的规范校验 什么是 Git Hooks Git Ho
  • c调用python库_c中嵌入的python代码 – 导入python库时出错

    我试图使用嵌入在C程序中的 Python 3 5解释器从C接收图像 并将其用作我训练的张量流模型的输入 首先 我将我的图像转换为numpy数组 然后将其发送到python 这是我的简化代码 工作正常 从 here采用的代码 Python代码
  • web测试,App测试,小程序测试区别

    最近项目真的太忙了 不过 今天无论如何我都要更文章了 谢谢大家的支持 不断努力进步 这篇文章 我就是要梳理一下 web测试 app测试 和小程序的区别 话不多说 上主题 web测试 App测试 小程序测试 一 web测试 1 1 什么是we
  • JS时间戳转换方式

    前言 在js中将时间戳转换为常用的时间格式 有三种主要的方式 1 使用JS中已有的函数 例如getFullYear getMonth 等 将时间戳直接转换成对应的年月 2 创建时间过滤器 在其他的页面中直接调用该过滤器 转换时间戳 3 使用
  • 使用trtexec工具多batch推理tensorrt模型(trt模型)

    文章目录 零 pt转onnx模型 一 onnx转trt模型 二 推理trt模型 零 pt转onnx模型 参考 https github com ultralytics yolov5 用根目录下的export py可以转pt为onnx模型 命
  • Gem5模拟器,详解官网教程的statistics and output(三)

    gem5是一个计算机模拟器 它可以用来模拟不同类型的计算机系统 以帮助计算机科学家和工程师更好地理解和优化计算机系统的性能 gem5提供了许多统计信息和输出功能 可以帮助用户更好地了解模拟的计算机系统的性能情况 gem5的统计信息可以通过访
  • Ubuntu20.04配置ESP32-IDFV5.1环境及Component工程样例

    更新Ubuntu20 04下载源 cd etc apt 更新sources list为如下下载源 并保存 添加阿里源 deb http mirrors aliyun com ubuntu focal main restricted univ
  • 【Mac】mac安装go

    1 安装 安装 brew install go 这里采用界面安装 http c biancheng net view 3994 html 验证 go version base lcc lcc go version go version go
  • QT creator同时打开多个运行窗口(客户端窗口)

    一 最近在做TCP多连接server的问题 但是发现qt不能同时打开多个客户端窗口 解决办法 可以使用windows下的cmd命令窗口 用命令的方式运行多个客户端 我的客户端的名字是wbclient exe step1 首先通过cmd进入到
  • tomcat 开放远程调试端口

    1 开启远程调试端口 WIN系统 在catalina bat里 SET CATALINA OPTS server Xdebug Xnoagent Djava compiler NONE Xrunjdwp transport dt socke
  • perl脚本的简单调试方法

    初学perl语言 最先接触的不是它的语法 而是它的调试方法 当时是由于一个perl script生成的html页面无法正常显示 让我找出问题的原因 然后修复 当时是第一次接触perl 完全没有任何了解 就凭着学了几句在Teriminal中可
  • rtt下的adbd使用

    RTT 下的ADBD使用 1 引言 调试柿饼时 需要文件传输 由于智龙平台的RTT环境下USB还没有调试好 这里就使用ADB进行文件传输 找到了何元杰的帖子 并参考 rdb 建立 RTT与PC 的文件传输通道 2 使用环境 2 1 硬件平台
  • 5万条药品数据库下载数据,带图片

    链接 https pan baidu com s 1zBytf7BGty I3FCBPF2PxA 提取码 fshp
  • C#,入门教程(02)—— Visual Studio 2022开发环境搭建图文教程

    如果这是您阅读的本专栏的第一篇博文 建议先阅读如何安装Visual Studio 2022 C 入门教程 01 Visual Studio 2022 免费安装的详细图文与动画教程https blog csdn net beijinghorn
  • 富爸爸穷爸爸

    有意思的观点 1 贫穷和破产的区别 破产是暂时的 而贫穷是永久的 2 我们听说过穷人买彩票中奖的故事 他们一下子暴富起来 但不久又变穷了 还有关于职业运动员的故事 有一个运动员在24岁的时候 一年就挣了几百万美元 但到了34岁的时候却露宿桥
  • java中反射机制的主要作用

    C 自身并没有提供像Java这样完备的反射机制 只是提供了非常简单的动态类型信息 如type info和typeid 然而在一些C 的第三方框架类库中提供了类似的功能 如MFC QT 其中MFC是通过宏的方式实现 QT是通过自己的预编译实现
  • verilog中include的用法

    Verilog 的 include和C语言的include用法是一样一样的 要说区别可能就在于那个点吧 include一般就是包含一个文件 对于Verilog这个文件里的内容无非是一些参数定义 所以 这里再提几个关键字 ifdef defi
  • Oracle入门笔记(五)——Oracle表间关系、SQL语句、基本函数

    Oracle表间关系 SQL语句 基本函数 1 引言 2 数据库的收费问题 3 数据库对SQL标准的兼容性 4 SQL语言的种类 5 Oracle中的HR用户 6 Oracle中基本的SQL语句的使用 7 Oracle中基本函数的使用 1
  • 嵌入式 十个最值得阅读学习的C开源项目代码

    Webbench Webbench是一个在linux下使用的非常简单的网站压测工具 它使用fork 模拟多个客户端同时访问我们设定的URL 测试网站在压力下工作的性能 最多可以模拟3万个并发连接去测试网站的负载能力 Webbench使用C语