CGI应用(1)

原创 2015年11月17日 18:28:00

最近在学习嵌入式WEB服务器的移植,对于BOA服务器的移植,网上的文章很多,大家可以直接搜索嵌入式BOA服务器的移植;

对于一个移植好的WEB服务器,例如BOA服务器,如何通过网页实现对板子的控制功能呢,这就需要CGI了,具体来说,CGI(common getway interface)就是运行在WEB服务器之外的供服务器调用的程序。它与服务器配合使用,可以让服务器具有更强大的功能。

下面学习如何使用CGI?(利用网页控制LED)

1.移植CGI库:cgi205.tar.gz(注意修改MAKEFILE文件)  工具链使用arm-linux-

2.执行make  生成libcgic.a.将该库放置在开发板根文件系统中lib目录下

3.修改BOA的配置文件,打开/etc/boa/boa.conf  文件。找到:ScritAlias /cgi-bin/    /usr/lib/cgi-bin/  这行配置程序为了指明我们的CGI程序放在哪个位置;我们将其修改为:ScriptAlias /cam  /web/cma/   我们将编译好的CGI程序都放到开发板的/web/cma目录

4.修改网页文件:加入相应的目录:<a class = "menu" hvef = "/led.html">

LED控制

5.打开led.html

   需要注意两点:1.当我们填写参数之后提交之后,调用相应的CGI程序:<form action-“/cam/lcd.cgi”method-“get”>,我们待会编译好的CGI程序将要放在/cam/目录下,并取名为lcd.cgi.

                             2.参数问题,这里有两个参数“led_control”“led_status”(跳转页面)

                                ??思考,这两个变量如何传过去的?

                               这两个参数变量通过跳转地址传过去,这样CGI程序就可以将这两个参数从这个地址处取出来

6.程序编写

Touch led.c 修改权限

打开文件led.c,编写控制程序。

控制LED

#include <stdio.h>

#include <stdlib.h>

int main()

{

       intfd;

       intled_control, led_state;

       fd= open("/dev/leds0", 0);

       ioctl(fd,led_state, led_control);

       closefd; 

}

编写好led.c程序之后,面临的问题:如何获取两个参数:led_control,led_state;

从地址信息可以拿到这两个参数:

环境变量保存在QUERY_STRING(字符串)

获取参数:

#include <stdio.h>

#include <stdlib.h>

int main()

{

       intfd;

       intled_control, led_state;

       char*data;

      

       /*获取环境变量 */

       data= getenv("QUERY_STRING");

       /*将有用的信息剥离出来  使用格式化输入函数sscanf */

       sscanf(data,"led_coontrol=%d&led_state=%d",&led_control,&led_state);

       fd= open("/dev/leds0", 0);

      

       ioctl(fd,led_state, led_control);

       closefd; 

       return0;

}

在页面中显示控制LED结果的信息:(在网上搜索CGI简明教程,学习如何编写CGI程序)。

#include <stdio.h>

#include <stdlib.h>

int main()

{

       intfd;

       intled_control, led_state;

       char*data;

      

       /*构造一个反馈页面给用户看*/

       cgiHeaderContentType("text/html");

       fprintf(cgiOut,"<HTML><HEAD>\n");

       fprintf(cgiOut,"<TITLE>LED CGI</TITLE></HEAD>\n");

       fprintf(cgiOut,"<BODY>");

       fprintf(cgiOut,"<H1>LED_CONTROL OK </H1>");

       fprintf(cgiOut,"</BODY>\n");

       fprintf(cgiOut,"</HTML>\n");

      

       /*获取环境变量 */

       data= getenv("QUERY_STRING");

      

       /*将有用的信息剥离出来  使用格式化输入函数sscanf */

       sscanf(data,"led_coontrol=%d&led_state=%d",&led_control,&led_state);

       fd= open("/dev/leds0", 0);

       ioctl(fd,led_state, led_control);

       closefd; 

       return0;

       }

7.编译:

       #arm-linux-gcc  –L ./cgi205/  -lcgic  –I ./cgic205/  led.c  –o led.cgi

       -L:指明cgi库的地址;  -lcgic:指明cgic这个库  -I:指明头文件

 

            编译过程遇到的问题:将main->cgiMain

             产生led.cgi  

            将led.cgi放入/web/cma/目录

8.打开开发板运行WEB服务器




版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

cgi ajax js 刷新 html1

  • 2017年01月07日 17:47
  • 4KB
  • 下载

国外ASP.CGI.Perl.and.PHP(1)

  • 2006年02月23日 09:05
  • 951KB
  • 下载

嵌入式应用中CGI编程中POST、GET及环境变量详解

原载地址:http://3633188.blog.51cto.com/3623188/828095     1.POST和GET      一个CGI程序在于服务器之间的信息传输和数据传...

Web应用程序CGI到Web三层系统

  • 2013年05月11日 23:41
  • 25.54MB
  • 下载

丹诺IP Camera CGI 应用指南

  • 2012年02月24日 11:39
  • 287KB
  • 下载

嵌入式Linux之我行——C+CGI+Ajax在S3C2440中的应用

原文地址:嵌入式Linux之我行——C+CGI+Ajax在S3C2440中的应用 作者:hbhuanggang 嵌入式Linux之我行,主要讲述和总结了本人在学习嵌入式linux中的每个步...
  • softcg
  • softcg
  • 2016年12月09日 12:43
  • 314

CGI编程学习-1

一.基本原理 CGI:通用网关接口(Common Gateway Interface)是一个Web服务器主机提供信息服务的标准接口。通过CGI接口,Web服务器就能够获取客户端提交的信息,转...

python 使用CGI进行远程编辑1

CGI (Common Gateway Interface)通用网关接口  CGI是网络服务器可以将查询(一般来说是通过Web表单), 传递到专门的程序(比如python程序)并且在网页上显示结果的标...

Python ----脚本CGI、特点、应用、开发环境

CGI CGI 目前由NCSA维护,NCSA定义CGI如下: CGI(Common Gateway Interface),通用网关接口,它是一段程序,运行在服务器上如:HTTP...

apache CGI模块应用

http://blog.chinaunix.net/uid-12020217-id-2963636.html 简介 相关模块 相关指令  mod_alias mod_cgi...
  • dsg333
  • dsg333
  • 2013年01月02日 22:32
  • 2213
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:CGI应用(1)
举报原因:
原因补充:

(最多只允许输入30个字)