zoukankan      html  css  js  c++  java
  • 阶段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/目录下,根据

    放到相应下面去!!

  • 相关阅读:
    Axis2发布Webservice进行身份校验
    Spring集成Axis2
    分布式事务解决方案之TCC
    Lua 数据类型
    Lua 基本语法(1)
    Axis发布Webservice服务
    Linux中NFS服务器搭建
    SpringBoot多环境切换
    springboot中spring.profiles.include的妙用
    oracle树形语句
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6022653.html
Copyright © 2011-2022 走看看