最近在GitHub上看到了一个不错的C项目:https://github.com/EZLippi/Tinyhttpd,就想学习一下然后复现。
首先我把这个项目clone到了本地,依照项目里在Linux系统中编译的规则进行代码修改,make之后有大量报错,根据报错把accept_request函数的参数改成int client就好了。
编译完成后尝试运行发现cgi文件不能正常工作,于是我把这个项目里的每个文件都打开看了一下,发现是cgi文件头部的perl路径不对,把perl路径改成本地perl路径后就能正常运行了。
确定项目无问题后就开始阅读代码并在网上查找相关的网络编程知识以及代码中用到的函数使用方法,大致理解程序运行流程后自己根据原代码复现了一份。
由于我复现的代码把原代码中的几个错误响应函数合并了,所以看起来要比原代码更短小一点。虽然在复现过程中遭遇了不少问题,比如cgi文件无法执行,以及不熟悉的函数传参错误,但都用在网上查找到的资料解决了。下面是我复现的项目文件: