一个小而美的 C 语言项目!
cxuan 最近在学习 C 语言,看的一本书叫做 《C Primer Plus》,这本书对 C 语言的描写、特性介绍、代码示例都介绍的比较详细,是小白入门 C 语言非常不错的一本书,还有一本经典书叫做《C 程序设计语言》,这本书可以作为 《C Primer Plus》下一步要解锁的成就。
(资料图片仅供参考)
那么只是看书学习是不够的,还需要学习别人写的优秀代码,汲取优秀的代码逻辑和编程范式,并把他融入到自己的血液中,才能在编程这条路上不断进步。
最近接触到了一个叫做 tinyhttpd的项目,这个项目想必大家学 C 的应该都听过,这是 J. David Blackstone 在 1999 年写的一个小型 HTTP 服务器的项目,用来学习非常不错,可以帮助我们真正理解服务器程序的本质以及 HTTP 的请求响应过程。大家可以去官网下载这个项目 http://tinyhttpd.sourceforge.net 。
当然,也有同学 fork 了这个项目,大家也可以在 https://github.com/EZLippi/Tinyhttpd 直接 fork 或者 clone。
我最近抽空也是把这个项目跑起来并研究了一下。
本地自己搭了一台服务器,用的是 vmvare 和 Centos 7 ,vmvare 可以随处下载到,Centos 7 我给大家整理了一个下载链接 https://archive.kernel.org/centos-vault/ Centos 直达即可。
另外,网上关于虚拟机安装配置的介绍数不胜数,这里我就不再过多的介绍安装过程,可以参考一下这篇。
https://www.cnblogs.com/tanghaorong/p/13210794.html
配置完成之后需要设置一下桥接模式,关于桥接模式的设置可以参考这篇 。
https://www.cnblogs.com/DJOSIMON/p/14927176.html
配置完成后我们就可以通过 xshell 连接到本地 Linux 服务器了。xshell 和 xftp 我是直接用的学生版,下载省事而且功能和商业版没区别。
自己搭建完服务器之后,我们就可以尝试着在 Linux 下先把这个 TinyHttpd 源码跑起来再研究其内部逻辑。clone 完整个项目后的项目框架如下,其中的 httpd.c 就是这个 HTTP 服务器的完整代码逻辑。
通过 xftp 或者 rz 把整个 TinyHttpd tar 包放在 Linux 服务器上,对其进行解压,我们vi httpd.c后可以发现,David 已经把 TinyHttpd 在 Linux 下的编译方式给我们写清楚了。
要在 Linux 下编译这个 TinyHttpd 项目,需要注释掉下面几段代码:
注释掉 #include <pthread.h> ,如下所示注释掉定义在 newthread 变量的位置,在 main 函数中,如下所示注释掉运行运行 pthread_create() 的位置,如下图所示
把注释掉的 accept_request(client_socket) 函数放开如果你按照上图这样把相应的代码注释掉并且放开的话,那么代码准备工作就做完了,现在我们可以尝试编译一把 httpd.c文件了。
在 Linux 下使用 Make 进行编译,编译过程中可能会出现问题,比如让你安装 gcc 等编译工具,安装完成后再次编译会出现下面这些问题。
这些问题刚开始把我搞的有些焦躁,后来一细看这些都是 warning ,不是 error ,尝试运行一下程序发现不影响程序运行,就没有再细看这些 warning。
编译完成后会出现一个 httpd文件,我们可以通过 ./httpd来运行 httpd 程序,程序运行完成后会出现端口的绑定消息。
然后我们可以通过虚拟机的静态ip:端口的方式来访问 TinyHttpd 的 index.html 主页,如下图所示。
这个理想的情况是,输入一个颜色之后,点击提交页面会变更为你想要的颜色,但是我输入一个颜色比如 red 后,点击提交,页面会直接显示一个白色页面。
我查 www.baidu.com 查了好久没有找到一篇靠谱的博文,排名靠前的都是千篇一律没什么借鉴意义的词条。这里推荐大家有条件的直接挂 tz ,没有的上 biying 也可以。
我是在 biying 上找到了一篇解决办法。
首先,我们先需要安装一下 Perl和 Perl-CGI,没有这俩的话,那你 CGI 就是无法展示。这在 github 上也有详细的说明。
直接使用下面命令安装即可(其他 Linux 发行版的操作系统可能不适用,需要找对应的操作系统安装命令行进行安装)
yum install perlyum install perl-cgi
安装完成后会有 Complete! 的提示,同时我们需要知道你的 perl 安装命令,可以使用
which perl
来查询。
我们需要进入到 htdocs中,给 color.cgi 和 index.html 分别赋权限。
chmod -R 777 color.cgi chmod -R 666 index.html
然后我们进入到 color.cgi 中,把开头中的 perl 安装位置改为你安装 perl 的位置,如下图所示
保存之后,重新回到上层目录,输入 ./httpd 之后,就可以看到主页点击提交颜色之后对应的颜色变化了。
后面我们就开始研究一下这个 httpd 项目了。
关键词:
推荐阅读
特斯拉的最低价是多少? 其他车型的最低价格是多少?
特斯拉作为一个豪华电动车品牌,你知道特斯拉价格多少钱一辆吗?目前特斯拉销售的主要Model S、Model X以及国产Model 3,那么,特拉斯最 【详细】
通用设备介绍 通用设备包括什么?
通用设备介绍一、通用设备。办公和商务通用设备,包括文化办公机械、消防设备、电机、变压器、锅炉、空调设备、清洁卫生设备、通讯设备、视 【详细】
美国UFO探索事件 全面解析美国UFO探索事件
一般在发生UFO探索事件之后,许多的研究人员都会认真的去分析此事件发生的前因后果,去搜集一些相关的证据,但是其实我们还能够从这些事件 【详细】
汽车吸尘器好用吗?汽车吸尘器真的有用么?
现在随着大家都逐渐拥有了自己的汽车,很多人对汽车的一些相关工具也还是逐步的关注了起来。其中车载吸尘器就是大家关注度最高的产品,那么 【详细】
航天员太空生活舱内景曝光 在太空中航天员之间是如何交流的呢?
航天员太空生活舱内景曝光,航天员在天上是如何生活的呢?中国载人航天工程空间站、神舟系列载人飞船、天舟系列货运飞船和长征系列运载火箭 【详细】
相关新闻
- 一个小而美的 C 语言项目!
- 你的隐私,大数据怎知道?我们又该如何自我保护? 今日快讯
- 世界资讯:Notion AI已面向国内用户开放,六大核心能力,快来注册体验!
- 【天天新视野】无押金、零抽佣,货拉拉搞起副业“同城跑腿”,玩儿的还是烧钱?
- 全球热消息:外国网友关注:埃隆-马斯克公开嘲笑是否被解雇的Twitter残疾员工
- 酷特智能董事长张蕴蓝联合国发表演讲:激发数字时代女性创新创造活力
- 天天亮点!宁德时代掀起新能源电池降价潮,新能源工程机械能否迎来大发展?
- 丰田拆解了一辆特斯拉:我学不来,但大为震撼|天天简讯
- 诺基亚N82介绍 诺基亚N82拆解分析
- 天涯明月刀删号事件始末来龙去脉 天涯明月刀删号事件回应
- DNF成长数据卡怎么获得?dnf账号数据怎么清除?
- Solon2 之 Kotlin 语言开发后端项目,很爽
- 凉兮爆料福禄寿OTC割韭菜 币圈大佬豪车金条地下钱庄令人咋舌
- WinPE制作软件-Wim&EsdTool
- 环球微动态丨Android正在为您的手机添加大量主要新功能!!
- 河南洛阳市闽鑫食品1批次“零辰”怪味豆酸价超标-环球今热点
- 缺少vcomp100.dll怎么解决?vcomp100.dll官方版安装方法汇总
- Win7系统用户在对玩梦幻西游出现了更新失败怎么办?
- win10系统电脑登陆facebookssh代理介绍 加速器软件可访问facebook吗?
- 热血无赖出现了闪退的情况 热血无赖出现了闪退的情况怎么办啊?