




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
linux嵌入式系统期末作业选 题: webserver编程实例 学 号: 姓 名: 班 级: 邮 箱: 成 绩: 2011年11月29日目录1、代码解析:3(1)index.html文件解析:3(2)adc.html文件解析:3(3)Adc.xml文件代码解析:5(4)run.c文件代码解析:5(5)stop.c文件代码解析:82、程序完成的主要功能:93、必要的操作步骤:104、执行程序的结果(效果图):125、本门课程体会及建议:131、代码解析:(1)index.html文件解析:AD远程采集实验/* 设置网页标题*/*设置页面背景颜色为青绿色*/AD远程采集实验/*定义最大标题并居中*/2008-12-11 /*设置日期居中*/ /*生成一个链接到33/cgi-bin/run.cgi的表单*/*生成一个“查看”按钮*/(2)adc.html文件解析: /* 创建脚本的格式为javascript */var XMLdoc; /* 创建XMLdoc对象 */function loadXML()if(window.ActiveXObject) /*判断是否支持ActiveX控件*/XMLdoc = new ActiveXObject(Microsoft.XMLDOM);/*实例化一个ActiveX控件*/XMLdoc.async = false;XMLdoc.load(adc.xml);/*读取xml文件*/getmessage();/*函数调用*/setTimeout(loadXML(), 1000);/* 页面每1000毫秒刷新一次*/function getmessage()/* 获取旋钮值*/document.getElementById(ch_0).innerHTML= XMLdoc.getElementsByTagName(ch_0)0.childNodes0.nodeValue; /*从xml文件里取出ch_0的值写入网页中id为ch_0的文件中*/document.getElementById(ch_1).innerHTML= XMLdoc.getElementsByTagName(ch_1)0.childNodes0.nodeValue; /*从xml文件里取出ch_1的值写入网页中id为ch_1的文件中*/document.getElementById(ch_2).innerHTML= XMLdoc.getElementsByTagName(ch_2)0.childNodes0.nodeValue; /*从xml文件里取出ch_2的值写入网页中id为ch_2的文件中*/*背景颜色是青绿色*/AD远程测试实验/*定义最大标题并居中*/ /* 生成表单并居中 */* 生成宽度是屏幕的50%,表格线条粗细为1的表格并居中 */AD远程测试实验/* 表头单元格内容为AD远程测试实验并居中 */通道0V/* 设置id为ch_0并居中* /通道1V/* 设置id为ch_1并居中 */通道2V/* 设置id为ch_2 并居中*/*生成一个链接到33/cgi-bin/stop.cgi的表单*/*生成一个“停止采集”按钮并居中*/(3)Adc.xml文件代码解析:0.0/* 设置ch_0的初始值为0.0 */1.0/* 设置ch_1的初始值为1.0 */3.0/* 设置ch_2的初始值为3.0 */A/*解析通道中的AD数据*/(4)run.c文件代码解析:#include #include #include #include #include void getdata(char *buff, int adcfd, int ret) /*AD数据的采集,并进行格式转换*/int temp;int i=0, j;for(j=0; j3; j+)/*控制通道的循环*/ioctl(adcfd, j, 0); /*控制I/O通道*/read(adcfd, &temp, sizeof(int);/*将开发板的值返回到temp*/temp += 16;temp = temp/31;for(; iret; i+)if(buffi = ) & (buffi+1 = c) & (buffi+2 = h)break; /* 判断字符串ch是否出现,若出现,跳出循环,进行数据转换;若没有,继续循环. */buffi+6 = (temp/10) + 48;buffi+8 = (temp%10) + 48; /*获取数据赋值给temp,并进行格式的转化*/i+;void lock_set(int fd, int type) /*文件上锁函数,在主程序中将被调用*/struct flock lock; /* 定义结构体flock lock */lock.l_whence = SEEK_SET;lock.l_start = 0;lock.l_len = 0;lock.l_type = type;while(1)if(fcntl(fd, F_SETLK, &lock) = 0)return; /* 判断文件是否被锁定,若锁定,则退出;否则,继续锁定*/int main(void)pid_t pc;int adcfd, xmlfd, ret;unsigned char buff150;int i;pc = fork();/*创建主线程,用于打印一些HTML代码,使页面跳转到adc.html页面去,打印完HTML信息后该线程就退出*/if(pc0)printf(fork error!n);return -1; /* 判断进程,若pc0,打印HTML文档 */else if(pc0) /* 打印HTML文档 */printf(Content-type:text/htmlnn);printf(n);printf();/* 使页面跳转到adc.html页面 */printf();exit(0);elsesetsid(); /*脱离父进程*/chdir(/); /*改变当前目录*/umask(0); /*重设文件权限掩码*/for(i=0;i65535;i+) close(i); /*关闭设备文件描述符*/adcfd = open(/dev/adc, O_RDWR); /* 打开adc设备文件*/if(adcfd 0)printf(Cannot open adc device!n);/* 判断能不能打开adc设备文件,若打开继续下面程序;反之,打印出不能打开adc设备*/return adcfd;while(1)while(1)xmlfd = open(/var/www/adc.xml, O_RDWR);/* 打开adc.xml文件*/ if(xmlfd0)continue;elselock_set(xmlfd, F_WRLCK);/* 给文件上锁,避免其他进程对该文件进行写操作*/break;ret = read(xmlfd, buff, 150); /* 将xml值读到buff */for(i=0; iret; i+)if(buffi = $) /*如果为$,则说明用户按下了停止采集键,结束程序*/buffi = A;lseek(xmlfd, 0, SEEK_SET);/* 移动文件指针*/write(xmlfd, buff, ret); /*写入修改后的值*/lock_set(xmlfd, F_UNLCK); /*给文件上锁,阻止被删除*/close(xmlfd);close(adcfd);return 0;getdata(buff, adcfd, ret);lseek(xmlfd, 0, SEEK_SET);write(xmlfd, buff, ret); /*采集数据并把数据显示在页面上,以便于监测*/lock_set(xmlfd, F_UNLCK); /*给xml文件上锁*/close(xmlfd);sleep(1);close(xmlfd);close(adcfd);return 0;(5)stop.c文件代码解析:#include #include #include #include void lock_set(int fd, int type)struct flock lock; /* 定义flock lock结构体*/lock.l_whence = SEEK_SET; /* 读写位置指向文件头 */lock.l_start = 0;lock.l_len = 0;lock.l_type = type;while(1)if(fcntl(fd, F_SETLK, &lock) = 0)return; /* 判断文件是否被锁定,若锁定,则退出;否则,继续锁定*/int main(void)int fd, ret;char buff150;int i;/*打印HTML文档*/printf(Content-type:text/htmlnn);printf(n);printf(n);/* 停留在此页面,不断刷新*/printf();while(1)fd = open(./adc.xml, O_RDWR); /*打开adc.xml文件*/if(fd0)continue; /* 判断文件是否打开,若没打开,继续;若打开,给文件上锁*/elselock_set(fd, F_WRLCK);/* 给文件上锁,避免其他进程对该文件进行写操作*/break;ret = read(fd, buff, 150); /* 将标志文件中的值读到buff */for(i=0; iret; i+)if(buffi = s) & (buffi+1 = t) & (buffi+2 = o) & (buffi+3 = p) /* 判断是否出现字符串stop,若出现,跳出循环,执行下面操作;反之,一直循环*/break;buffi+5 = $; /*如果为$,则说明用户按下了“停止采集”键,结束程序,否则继续执行*/lseek(fd, 0, SEEK_SET);write(fd, buff, ret);/* 写文件,改变文件内容,以便视频采集程序能检测到该变化*/lock_set(fd, F_UNLCK); /*给文件上锁*/close(fd); /*关闭设备文件描述符*/return 0;2、程序完成的主要功能:(1)index.html是我们在IE浏览器的地址栏中输入服务器IP地址时所看到的页面, 当点击查看按钮时,页面会跳转到数据采集的显示页面,同时,服务器的后台程序也会开始运行,对我们的三个输入通道进行采集,是索引网页,是让用户进行使用(2)adc.html这个文件的页面就是我们在按下上面的Index.html的查看按钮后跳转过来的, 它分别显示了我们的开发板上的三个AD通道的采样值,是为数据采集而制作的网页(3)Adc.xml后台服务程序也会对这个文件进行读写,从而达到服务器和用户进行数据交换的目的。(4)Run.c这个程序是在点击第一个页面(index.html)上的“查看”按钮后执行的。程序的开始会调用fork来创建两个线程:一个主线程,用于打印一些HTML代码,使页面跳转到我们的adc.html页面去,打印完HTML信息后该线程就退出;另一个子线程执行真正的AD数据采集,它读取三个通道的AD值,并对读出来的值进行转换,并将读取的结果写入adc.xml文件中,供用户检索。同时,这个线程还会检查adc.xml的标签中的内容,如果为$,则说明用户按下了“停止采集”键,那么就结束程序的执行,否则继续执行。(5)Stop.c该程序的实现比较简单,当用户按下数据采集页面的“停止采集”按钮后,会执行这个程序。本程序是改变adc.xml文件中的标签中的内容,在其中插入一个$字符,当我们的数据采集程序检测到这个变化后,就会停止采集。3、必要的操作步骤:(1)在实验目录下为本实验创建webserver目录(2)进入webserver目录,使用编辑器vim建立文件webserver,将实验指导中有关代码粘贴过来(3)我们的光盘中提供了boa的源代码boa-0.94.13.tar.gz,解压该文件(4)编译BOA服务器和CGI程序(5)配置BOA服务器,另外在实验目录的/etc目录下还需要一个mime.types文件,直接从主机上的/etc目录拷贝。(6)启动开发板,制作完成rootfs,通过mkcramfs工具生成root.cramfs只读文件系统,1)确认serverip是Linux虚拟机的IP地址;2) 将生成的uImage文件拷贝到tftpboot目录下;3)在ARM开发板上运行命令;把uImage文件下载到ARM开发板的SDRAM中0x30008000开始的空间中;擦除Nand Flash中起始地址为0x380000,大小为0x400000的空间;把SDRAM中0x30008000开始的内容写入Nand Flash0x380000开始的空间内,大小为0x400000(7)up-class2410 # setenv bootcmd nand read 0x30008000 0x80000 0x250000; bootm此项是内核自动启动的参数,如果已设置就不用再重新设置up-class2410 # setenv bootargs root=/dev/mtdblock2 init=/linuxrc (接上面空一格)console=ttySAC0,115200up-class2410 # saveenv(8)把上面的index.html、adc.html和adc.xml三个文件拷贝到开发板的/var/www目录下;把前面编译得到的run.cgi和stop.cgi拷贝到/var/www
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 交叉作业铲车安全防护合作协议
- 义务解说活动方案
- 乌鸦手工活动方案
- 动火作业现场管理制度
- 公司车辆保险管理制度
- 总包管理制度
- 公司财务收据管理制度
- 医保服务协议管理制度
- 公司物流派车管理制度
- 全员创新流程管理制度
- 中医诊断学(切诊-按诊)
- 《老年肺炎临床诊断与治疗专家共识(2024年版)》临床解读
- 交通部《公路建设项目可行性研究报告编制办法》(新)
- 高级护理实践知到智慧树章节测试课后答案2024年秋浙江中医药大学
- 税收政策与社会公平分配问题探讨-洞察分析
- 冀教版二年级下册数学复习计划
- 2025华电(海西)新能源限公司面向华电系统内外公开招聘高频重点提升(共500题)附带答案详解
- 2025届安徽省合肥市重点中学中考二模生物试题含解析
- 森林生态旅游与康养基础知识单选题100道及答案
- DB33T 2239-2020 经颅磁刺激戒毒康复应用管理规范
- 医疗损害责任民法典
评论
0/150
提交评论