LV11-02-CGIC库-01-移植过程
本文主要是CGIC库移植的相关笔记,若笔记中有错误或者不合适的地方,欢迎批评指正😃。
点击查看使用工具及版本
Windows | windows11 |
Ubuntu | Ubuntu16.04的64位版本 |
VMware® Workstation 16 Pro | 16.2.3 build-19376536 |
SecureCRT | Version 8.7.2 (x64 build 2214) - 正式版-2020年5月14日 |
Linux开发板 | 华清远见 底板: FS4412_DEV_V5 核心板: FS4412 V2 |
u-boot | 2013.01 |
linux内核 | linuz-3.14 |
点击查看本文参考资料
参考方向 | 参考原文 |
华清远见课程 | 华清远见课程 |
驱动开发指南 | i.MX6ULL Linux阿尔法开发板资料 |
BOA官网 | Boa Webserver |
CGIC仓库 | boutell/cgic |
点击查看相关文件下载
文件 | 下载链接 |
--- | --- |
一、CGI和 CGIC
1. CGI
CGI(Common Gateway Interface) 是WWW技术中最重要的技术之一,有着不可替代的重要地位。CGI是外部应用程序(CGI程序)与Web服务器之间的接口标准,是在CGI程序和Web服务器之间传递信息的过程。CGI规范允许Web服务器执行外部程序,并将它们的输出发送给Web浏览器,CGI将Web的一组简单的静态超媒体文档变成一个完整的新的交互式媒体。在物理上是一段程序,运行在服务器上,提供同客户端HTML页面的接口。浏览器把这些信息传送到服务器的CGI目录下特定的CGI程序中,于是CGI程序在服务器上按照预定的方法进行处理。
CGI程序可以运行在 BOA 服务器中,我们通过 CGI 接口可以实现 C 语言与 HTML语言数据的交互,意思就是我们可以通过CGI,将C语言程序中的数据写入到网页中,也可以通过CGI,让C语言程序接收网页端的数据,这样就打通了C语言与HTML之间沟通的桥梁。
2. CGIC
CGIC 是一个支持 CGI 开发的开放源码的标准 C 库,可以免费使用,只需要在开发的站点和程序文档中有个公开声明即可,表明程序使用了 CGIC 库,用户也可以购买商业授权而无需公开声明。
CGIC 能够提供以下功能:
- 分析数据,并自动校正一些有缺陷的浏览器发来的数据;
- 透明接收用 GET 或 POST 方法发来的 Form 数据;
- 能接受上传文件;
- 能够设置和接收 cookies ;
- 用一致的方式处理 From 元素里的回车;
- 提供字符串,整数,浮点数,单选或多选功能来接收数据;
- 提供数字字段的边界检查;
- 能够将 CGI 环境变量转化成 C 中的非空字符串;
- 提供 CGI 程序的调试手段,能够回放 CGI 程序执行时的 CGI 状态;
总之, CGIC 是一个功能比较强大的支持 CGI 开发的标准 C 库,并支持 Linux , Unix 和 Windows 等多操作系统。
二、文件准备
1. CGIC 源码
1.1 源码获取途径
比较尴尬,网上很多教程都写了 CGIC 的官网地址,但是吧,不清楚为啥,点进去找不到源码,似乎网站都不对,就去 github 试了试,发现官方仓库在这里:boutell/cgic: cgic: an ANSI C library for CGI Programming (github.com)
所以就从 github 下载源码喽,我写这篇笔记的时候最新的已经是 2.08 版本,目前还未找到老版本在哪下载,就先用这老师给的 cgic205.tar.gz 这个压缩包的文件啦。可以在这里下载:
cgic205.tar.gz | CGIC库(密码:2gh6) |
1.2 获取源码文件
下载 cgic205.tar.gz 这个压缩包并将其存放于 ubuntu 下的共享文件夹下,路径为:
1 | /mnt/hgfs/Sharedfiles/ |
1.3 拷贝解压
然后我们可以将这个源码文件拷贝解压到 ubuntu 中,方便后边编译,我们可以在终端执行以下命令:
1 | cp /mnt/hgfs/Sharedfiles/cgic205.tar.gz ~/6temp/ # 拷贝压缩包 |
然后我们可以得到下边这些文件(通过 tree 命令查看):
1 | hk@vm:~/6temp/cgic205$ tree |
2. 文件分析
上边我们已经看了下 CGIC 解压后的文件,文件不多,各个文件作用如下:
文件名 | 说明 |
---|---|
cgic.h | 头文件 |
cgic.c | CGIC的源代码文件 |
cgictest.c | CGIC库的作者提供的一个CGI程序例子 |
capture.c | 用于调试CGI程序的工具 |
Makefile | 安装CGIC的脚本文件 |
可以看到,整个库实际上就是 cgic.c 一个文件,可以说是非常的精炼。可以把 CGIC 安装为操作系统的一个动态链接库,这样我们每次编译的时候,就不需要有 cgic.c 这个源文件了。但是由于需要,我们在后续使用过程中可能会修改 cgic.c 代码,所以我们不把它安装进系统。每次编译的时候,只要把 cgic.c 和 cgic.h 放到当前文件夹就好了。
二、 CGIC 移植
1. Makefile 修改
其实这个库我们并不需要怎么移植,只需要更换一下 Makefile 中的编译工具就可以了,便于我们使用即可,修改过的 Makefile 如下:
点击查看详情
1 | ##============================================================================# |
2. 编译源码
接下来就是用我们修改后的 makefile 来编译源码,我们执行:
1 | make ARCH=arm # ARM 平台 |
然后在目录下就会生成三个目标文件。
3. 效果测试
- 文件拷贝
我们上边已经编写了拷贝命令,来自动完成 .a 文件和 .cgi 文件以及 capture 文件的拷贝这些文件都需要拷贝到 boa 服务器的 cgi-bin 目录下:
1 | make nfscpy |
- 效果测试
我们在开发板中运行 boa 服务器,然后在 ubuntu 主机浏览器输入:
1 | http://192.168.10.102/cgi-bin/cgictest.cgi |
若是打开以下页面,则说明 CGI 可以正常使用: