阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

CGI快速入门

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

用户通过浏览器把请求传递到web服务器,当web服务器收到请求,如果处理不了该请求,则它会去找帮手(CGI程序)来完成该请求任务。

CGI程序就是在服务器外部的供服务器调用的程序,当二者配合使用,使服务器的功能更加强大。

我们要编写CGI程序首先需要去移植CGI的库

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

修改Makefile

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

然后编译

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

然后把库libcgic.a拷贝到开发板里面/rootfs/lib/里面去

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

下面去修改boa的配置文件

ScriptAlias这个配置项是用来指明CGI文件是放在哪儿的,

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

led.html

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

下面是如何来编写CGI程序了,其实它就是通用的c程序,首先可以按照c程序的编写思路来编写它

touch led.c

#include<stdio.h>

#include<stdlib.h>

int main()

{

 int fd;

char *data;

int led_control,led_state;

data = getenv("QUERY_STRING");

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

fd = open("/dev/leds0",0);//假设我的led设备文件对应的驱动是/dev/leds0

ioctl(fd,led_state,led_control);

close(fd);

}

led_state和led_control这两个参数怎么来,是通过网页传递过来的,那么怎么传递过来的呢

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

这两个参数信息是保存在环境变量当中的,这个 环境变量叫做QUERY_STRING

那么就要从这个环境变量中去提取出我们要的那两个参数

首先要去获取到字符串,所以要先定义一个字符串,

char *data;

然后获取环境变量的值使用

data = getenv("QUERY_STRING");

那么环境变量的值就到data里面来了

其实data里面有很多信息,我们需要的只有两个,那么怎么具体把这两个给弄出来呢

使用格式化的输入sscanf

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

目的是从data字符串里面找到引号里面的子串,然后把子串里面的参数提取到led_control以及led_state

那么这两个参数就拿到了。

当CGI运行完了之后,构造显示执行结果的信息

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

下面去输出主体body部分

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

最后是输出html的结束

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

当编写好led.c程序之后,要编译该程序

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

使用arm-linux-gcc来编译,因为要用到cgi的库,所以要去指明CGI库的地址(-L是指明CGI地址,-lcgic(指明具体的cgi库(libcgic.a)),-I指明头文件地址)

编译

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

把这个led.cgi放到开发板的web/cam/目录下,根据

阶段2-新手上路项目-移动物体监控系统Sprint4-嵌入式web服务器开发第2课-CGI快速入门-网页控制LED

放到相应下面去!!