CGI的认识与CGIC的移植

举报
王建峰 发表于 2021/11/19 03:58:46 2021/11/19
【摘要】 写在最前面 华清远见教育集团 15年专注高端IT培训 做良心教育,做专业教育,做受人尊敬的职业教育 创客学院官网:http://www.makeru.com.cn/ 华清远见创客学院嵌入式课程链接:http://www.makeru.com.cn/emb 华清远见创客学院物联网课程链接:http://www.makeru....

写在最前面


华清远见教育集团
15年专注高端IT培训
做良心教育,做专业教育,做受人尊敬的职业教育

创客学院官网:http://www.makeru.com.cn/
华清远见创客学院嵌入式课程链接:http://www.makeru.com.cn/emb
华清远见创客学院物联网课程链接:http://www.makeru.com.cn/iot

 

 

概述

CGI 是Web 服务器运行时外部程序的规范,按CGI 编写的程序可以扩展服务器功能。CGI 应用程序能与浏览器进行交互,还可通过数据库API 与数据库服务器等外部数据源进行通信,从数据库服务器中获取数据。格式化为HTML文档后,发送给浏览器,也可以将从浏览器获得的数据放到数据库中。几乎所有服务器都支持CGI,可用任何语言编写CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分为标准CGI 和间接CGI两种。标准CGI 使用命令行参数或环境变量表示服务器的详细请求,服务器与浏览器通信采用标准输入输出方式。间接CGI 又称缓冲CGI,在CGI 程序和CGI 接口之间插入一个缓冲程序,缓冲程序与CGI 接口间用标准输入输出进行通信。

 

目的:本文从学习的角度来认识CGI。重点是对整体框架的理解,和对CGIC在嵌入式环境的移植。

 

框图

CGI程序的工作一般就是接收表单数据,进行数据处理,最后根据处理结果生成新的页面返回给浏览器。

 

CGIC

CGIC是一个功能比较强大的支持CGI开发的标准C库,并支持Linux, Unix 和Windows等多操作系统

 

源码分析


cgic源码里面有大约10个文件
        cgic.h:头文件;
        cgic.c:CGIC的源代码文件;
        cgictest.c:CGIC库的作者提供的一个CGI程序例子;
        capture.c:用于调试CGI程序的工具;
        Makefile:安装CGIC的脚本文件;

 

用户操作流程分析


用户通过客户端应用(浏览器)向web服务发送一个get请求,web服务器返回一个默认的静态html页面;用户想在这个基础上进一步操作,比如用户登录,需要填写 '用户名-密码' 吧,这样提交的信息就以form表单的形式从web服务器,再通过CGI接口向服务器上的应用发送。CGI就是这么一个中间机制,这里简单理解就是讲前端产生的html语言转换成应用层的c语言,实现交互。

 

 

CGIC的移植过程

源码移植

1.下载源码
http://www.boutell.com/cgic/

2.解压

root@linux:cgi_test# tar -xvf cgic205.tar.gz 
 

3.修改交叉编译环境


  
  1. root@linux:cgic205# cd ./cgic205
  2. root@linux:cgic205# vim Makefile
  3.         CC=arm-none-linux-gnueabi-gcc
  4.         AR=arm-none-linux-gnueabi-ar
  5.         RANLIB=arm-none-linux-gnueabi-ranlib
  6.         #gcc cgictest.o -o cgictest.cgi ${LIBS}
  7.         $(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}
  8.         #gcc capture.o -o capture ${LIBS}
  9.         $(CC) $(CFLAGS) capture.o -o capture ${LIBS}

4.编译cgi源码

root@linux:cgic205# make
 

5.将capture和cgictest.cgi拷贝到nfs共享根目录下的boa/cgi-bin/目录中


  
  1. root@linux:cgic205# ls
  2. capture    cgic.c     cgic.o        cgictest.o   Makefile
  3. capture.c  cgic.h     cgictest.c    libcgic.a    readme.txt
  4. capture.o  cgic.html  cgictest.cgi  license.txt  support.txt
  5. root@linux:cgic205# cp capture cgictest.cgi /nfs/rootfs/boa/cgi-bin/
  6. root@linux:cgic205

6.测试效果

<1>开发板上


  
  1. [root@farsight boa]# pwd
  2. /boa
  3. [root@farsight boa]# ./boa


<2>浏览器输入url  http://192.168.9.9/cgi-bin/cgictest.cgi

 

 

进一步项目移植


1.添加新的文件到cgi源码目录


  
  1. root@linux:cgi# cp -rf cgi_src-05-30-17-00 ~/cgi_test/cgic205/
  2. root@linux:cgi# cd /root/cgi_test/cgic205/cgi_src-05-30-17-00
  3. root@linux:cgi_src-05-30-17-00# pwd
  4. /root/cgi_test/cgic205/cgi_src-05-30-17-00
  5. root@linux:cgi_src-05-30-17-00# cp m0_* ../
  6. root@linux:cgi_src-05-30-17-00# cp sem.h env1.c login.c setEnv.c data_global.h ../

2.修改Makefile编译规则,把刚才那些文件添加到Makefile编译项


  
  1. root@linux:cgi_src-05-30-17-00# cd ..
  2. root@linux:cgic205# vim Makefile
  3.     CC=arm-none-linux-gnueabi-gcc
  4.     AFLAGS=-Wall -g
  5.     LDFLAGS= -L ./lib
  6.     OBJS= capture.cgi m0_beep.cgi m0_fan.cgi m0_led.cgi \
  7.             m0_seg.cgi env1.cgi setEnv.cgi
  8.     run:$(OBJS)
  9.     $(OBJS):%.cgi:%.c
  10.             $(CC) $(AFLAGS) $< cgic.c -o $@ $(LDFLAGS)
  11.             
  12.     install:
  13.             $(CC) $(AFLAGS) login.c -o login.cgi
  14.             mv *.cgi ./out/
  15.             cp  ./out/*.cgi  /nfs/rootfs/boa/cgi-bin
  16.     .PHONY:clean
  17.     clean:
  18.             rm ./out/*.cgi

3.编译并将目标文件移动到nfs根目录下


  
  1. root@linux:cgic205# make
  2. root@linux:cgic205# make install

4.在/nfs/rootfs/boa/www下添加需要的html文件


  
  1. root@linux:boa# ls www/
  2. choose.html  env2.html  index.html  m0_2.html   main2.html  video1.html
  3. env1.html    images     m0_1.html   main1.html  pice        video2.html
  4. root@linux:boa# cp -rf www/* /nfs/rootfs/boa/www/

5.查看效果
用户通过浏览器访问开发板IP,web服务器返回一个默认页面

 

用户通过输入栏,填写用户名密码(提交表单),web服务器通过cgi接口返回又一个页面

 

 

扩展学习-cgic官网学习教程:https://boutell.com/cgic/

文章来源: blog.csdn.net,作者:hinzer,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/feit2417/article/details/84792908

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。