首页 > 其他分享 >一个小而美的 C 语言项目

一个小而美的 C 语言项目

时间:2023-01-12 08:55:46浏览次数:57  
标签:httpd 小而 语言 项目 美的 perl 编译 Linux 安装

我最近在学习 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 服务器的完整代码逻辑。

image-20221004090558121

通过 xftp 或者 rz 把整个 TinyHttpd tar 包放在 Linux 服务器上,对其进行解压,我们vi httpd.c 后可以发现,David 已经把 TinyHttpd 在 Linux 下的编译方式给我们写清楚了。

image-20221004153117299

要在 Linux 下编译这个 TinyHttpd 项目,需要注释掉下面几段代码:

  1. 注释掉 #include <pthread.h> ,如下所示

  1. 注释掉定义在 newthread 变量的位置,在 main 函数中,如下所示

  1. 注释掉运行运行 pthread_create() 的位置,如下图所示

  1. 把注释掉的 accept_request(client_socket) 函数放开

  1. 移除 Makefile 中的 -lsocket 选项,如下图所示

如果你按照上图这样把相应的代码注释掉并且放开的话,那么代码准备工作就做完了,现在我们可以尝试编译一把 httpd.c文件了。

在 Linux 下使用 Make 进行编译,编译过程中可能会出现问题,比如让你安装 gcc 等编译工具,安装完成后再次编译会出现下面这些问题。

这些问题刚开始把我搞的有些焦躁,后来一细看这些都是 warning ,不是 error ,尝试运行一下程序发现不影响程序运行,就没有再细看这些 warning。

编译完成后会出现一个 httpd 文件,我们可以通过 ./httpd 来运行 httpd 程序,程序运行完成后会出现端口的绑定消息。

然后我们可以通过虚拟机的静态ip:端口的方式来访问 TinyHttpd 的 index.html 主页,如下图所示。

这个理想的情况是,输入一个颜色之后,点击提交页面会变更为你想要的颜色,但是我输入一个颜色比如 red 后,点击提交,页面会直接显示一个白色页面。

我查 www.baidu.com 查了好久没有找到一篇靠谱的博文,排名靠前的都是千篇一律没什么借鉴意义的词条。这里推荐大家有条件的直接挂 tz ,没有的上 biying 也可以。

我是在 biying 上找到了一篇解决办法。

首先,我们先需要安装一下 PerlPerl-CGI ,没有这俩的话,那你 CGI 就是无法展示。这在 github 上也有详细的说明。

直接使用下面命令安装即可(其他 Linux 发行版的操作系统可能不适用,需要找对应的操作系统安装命令行进行安装)

yum install perl
yum 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 项目了。

原文链接:小而美的项目

欢迎大家关注我的个人公众号:程序员cxuan

标签:httpd,小而,语言,项目,美的,perl,编译,Linux,安装
From: https://www.cnblogs.com/cxuanBlog/p/17045415.html

相关文章

  • R语言如何做马尔可夫转换模型markov switching model|附代码数据
    全文链接:http://tecdat.cn/?p=6962最近我们被客户要求撰写关于马尔可夫转换模型的研究报告,包括一些图形和统计输出。假设有时间序列数据,如下所示。经验表明,目标变量y似......
  • C语言十进制转2进制数
    #include<stdio.h>#include<math.h>longtoBinary(intnum);intmain(intargc,charconst*argv[]){ intnum; printf("Pleaseinputanumber:"); scanf("%......
  • VSCode配置Go语言开发环境
    1.下载安装go语言环境下载安装下载链接Go安装包下载选择自己系统对应的版本下载测试下载安装过后测试goversion命令是否可以使用配置包管理镜像gomodule是Go......
  • C语言指针统览
    前言本文对C语言指针和指针使用时的问题做一个概览性的总结,并对一些值得探讨的问题进行讨论。阅读本文,读者能达到统览C语言指针的目的。以下的讨论只针对32/64位机器。指针......
  • c语言实现三子棋
    前言:在此之前我们学习了循环,函数,数组等相关知识,我们来写一个小游戏练练手概述:代码大致分为三部分程序主函数,函数,声明函数(这一点我们在通讯录项目是就介绍过了,将代码分为三部......
  • go 语言jsontoYAML
    /*CopyrightTheHelmAuthors.LicensedundertheApacheLicense,Version2.0(the"License");youmaynotusethisfileexceptincompliancewiththeLicense.You......
  • 哪些软件和程序用了C语言?
    在日常生活中,很多系统软件和桌面应用程序都采用C语言进行开发,下面给出了一些示例。1.操作系统UNIX是第一个使用**语言设计的操作系统,它使用的编程语言就是C语言。后来,Mic......
  • 一个C语言的剪刀石头布小游戏
    /******************************************************石头剪刀布的程序geek_monkey于2015年3月3日修改了bug(输入字符非石头剪刀布都算是玩家赢)编译环境为VC+......
  • C++_语言概览和资料
    C++C语言1969年-1973年完成,其出发点是为了编写Unix操作系统设计目标需求、背景和待解决问题 演化过程中,来自用户的反馈和语言实现者们积累的经验设计哲学:高效......
  • 区块链特辑——solidity语言基础(四)
    Solidity语法基础学习七、事件:事件Event·日志(log),是用来快速索引并查询过往资料的手段。·而solidity是透过“事件”在区块链上写下日志,使用者或由触发的事件所产生的......