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

CGI快速入门

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

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

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

修改Makefile

然后编译

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

下面去修改boa的配置文件

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

led.html

 

下面是如何来编写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这两个参数怎么来,是通过网页传递过来的,那么怎么传递过来的呢

这两个参数信息是保存在环境变量当中的,这个 环境变量叫做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运行完了之后,构造显示执行结果的信息

下面去输出主体body部分

最后是输出html的结束

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

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

编译

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

放到相应下面去!!

 

posted on   gary_123  阅读(242)  评论(0编辑  收藏  举报

编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示