公司项目催的紧,好久没更新了。
一、实验目的:
了解CGI的用法。以及如何将网页与服务器
通信机制的了解。
二、实验现象预览:
1.在浏览器输入
开发板的IP,可以看到如下界面:
2.选中open,点击submit按钮:网页提示open led successed.
3.观察板子,可以看到D1的led已点亮
三、代码分析
1.首先看下html文件:
重要的在这句“
”,一个表单,方法是GET,动作是执行led.cgi 。
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连。
当点击网页submit按钮时可以看到,浏览器地址栏变为:“http://192.168.199.200/cgi-bin/led.cgi?mode=led_on&button1=submit”。
2.cgi程序:
cgi程序使用CGIC库处理。CGIC的使用可以到他官网查看。
cgiFormStringNoNewlines 是 CGIC中的函数,可以用来获取,表单数据。即之前浏览器地址栏的““http://192.168.199.200/cgi-bin/led.cgi?mode=led_on&button1=submit”。中,mode的值。可以看到。此次提交mode的值为 led_on。
打开/dev/leds设备,使用ioctl控制led的亮灭即可。
- #include
- #include
- #include
- #include
- #include "cgic.h"
- #include
- #include
- #include
- #include
- #include
- char mode[64];
- void get_mode()
- {
- cgiFormStringNoNewlines("mode",mode, 64);
- }
- int cgiMain()
- {
- int fd=0;
- int rnt = 0;
- get_mode();
- fd = open("/dev/leds",0);
- if(strncmp(mode,"led_off",7) == 0)
- {
- rnt = 1;
- ioctl(fd,0,0);
- }
- else if(strncmp(mode,"led_on",6) == 0)
- {
- rnt = 2;
- ioctl(fd,1,0);
- }
- else
- {
-
- }
-
- cgiHeaderContentType("text/html");
- fprintf(cgiOut,"n");
- fprintf(cgiOut,"n");
-
- if(rnt == 0)
- {
- fprintf(cgiOut," OPEN LED FAILED!n");
- }
- else if(rnt == 1)
- {
- fprintf(cgiOut,"close led successed!n");
- }
- else if(rnt == 2)
- {
- fprintf(cgiOut,"open led successedn");
- }
- else
- {
-
- }
- fprintf(cgiOut,"n");
- fprintf(cgiOut,"n");
- close(fd);
- return 0;
- }