一个小而美的C语言项目!
cxuan最近在学习C语言,看的一本书叫做《CPrimerPlus》,这本书对C语言的描写、特性介绍、代码示例都介绍的比较详细,是小白入门C语言非常不错的一本书,还有一本经典书叫做《C程序设计语言》,这本书可以作为《CPrimerPlus》下一步要解锁的成就。
那么只是看书学习是不够的,还需要学习别人写的优秀代码,汲取优秀的代码逻辑和编程范式,并把他融入到自己的血液中,才能在编程这条路上不断进步。
最近接触到了一个叫做tinyhttpd的项目,这个项目想必大家学C的应该都听过,这是J。DavidBlackstone在1999年写的一个小型HTTP服务器的项目,用来学习非常不错,可以帮助我们真正理解服务器程序的本质以及HTTP的请求响应过程。大家可以去官网下载这个项目http:tinyhttpd。sourceforge。net。
当然,也有同学fork了这个项目,大家也可以在https:github。comEZLippiTinyhttpd直接fork或者clone。
我最近抽空也是把这个项目跑起来并研究了一下。
本地自己搭了一台服务器,用的是vmvare和Centos7,vmvare可以随处下载到,Centos7我给大家整理了一个下载链接https:archive。kernel。orgcentosvaultCentos直达即可。
另外,网上关于虚拟机安装配置的介绍数不胜数,这里我就不再过多的介绍安装过程,可以参考一下这篇。
https:www。cnblogs。comtanghaorongp13210794。html
配置完成之后需要设置一下桥接模式,关于桥接模式的设置可以参考这篇。
https:www。cnblogs。comDJOSIMONp14927176。html
配置完成后我们就可以通过xshell连接到本地Linux服务器了。xshell和xftp我是直接用的学生版,下载省事而且功能和商业版没区别。
自己搭建完服务器之后,我们就可以尝试着在Linux下先把这个TinyHttpd源码跑起来再研究其内部逻辑。clone完整个项目后的项目框架如下,其中的httpd。c就是这个HTTP服务器的完整代码逻辑。
通过xftp或者rz把整个TinyHttpdtar包放在Linux服务器上,对其进行解压,我们vihttpd。c后可以发现,David已经把TinyHttpd在Linux下的编译方式给我们写清楚了。
要在Linux下编译这个TinyHttpd项目,需要注释掉下面几段代码:注释掉includepthread。h,如下所示注释掉定义在newthread变量的位置,在main函数中,如下所示
注释掉运行运行pthreadcreate()的位置,如下图所示
把注释掉的acceptrequest(clientsocket)函数放开
移除Makefile中的lsocket选项,如下图所示
如果你按照上图这样把相应的代码注释掉并且放开的话,那么代码准备工作就做完了,现在我们可以尝试编译一把httpd。c文件了。
在Linux下使用Make进行编译,编译过程中可能会出现问题,比如让你安装gcc等编译工具,安装完成后再次编译会出现下面这些问题。
这些问题刚开始把我搞的有些焦躁,后来一细看这些都是warning,不是error,尝试运行一下程序发现不影响程序运行,就没有再细看这些warning。
编译完成后会出现一个httpd文件,我们可以通过。httpd来运行httpd程序,程序运行完成后会出现端口的绑定消息。
然后我们可以通过虚拟机的静态ip:端口的方式来访问TinyHttpd的index。html主页,如下图所示。
这个理想的情况是,输入一个颜色之后,点击提交页面会变更为你想要的颜色,但是我输入一个颜色比如red后,点击提交,页面会直接显示一个白色页面。
我查www。baidu。com查了好久没有找到一篇靠谱的博文,排名靠前的都是千篇一律没什么借鉴意义的词条。这里推荐大家有条件的直接挂tz,没有的上biying也可以。
我是在biying上找到了一篇解决办法。
首先,我们先需要安装一下Perl和PerlCGI,没有这俩的话,那你CGI就是无法展示。这在github上也有详细的说明。
直接使用下面命令安装即可(其他Linux发行版的操作系统可能不适用,需要找对应的操作系统安装命令行进行安装)yuminstallperlyuminstallperlcgi
安装完成后会有Complete!的提示,同时我们需要知道你的perl安装命令,可以使用whichperl
来查询。
我们需要进入到htdocs中,给color。cgi和index。html分别赋权限。chmodR777color。cgichmodR666index。html
然后我们进入到color。cgi中,把开头中的perl安装位置改为你安装perl的位置,如下图所示
保存之后,重新回到上层目录,输入。httpd之后,就可以看到主页点击提交颜色之后对应的颜色变化了。
后面我们就开始研究一下这个httpd项目了。