![基于linux的webserver編程實例_第1頁](http://file4.renrendoc.com/view/73ac31a1b2cf8fbe85ef773994cb4376/73ac31a1b2cf8fbe85ef773994cb43761.gif)
![基于linux的webserver編程實例_第2頁](http://file4.renrendoc.com/view/73ac31a1b2cf8fbe85ef773994cb4376/73ac31a1b2cf8fbe85ef773994cb43762.gif)
![基于linux的webserver編程實例_第3頁](http://file4.renrendoc.com/view/73ac31a1b2cf8fbe85ef773994cb4376/73ac31a1b2cf8fbe85ef773994cb43763.gif)
![基于linux的webserver編程實例_第4頁](http://file4.renrendoc.com/view/73ac31a1b2cf8fbe85ef773994cb4376/73ac31a1b2cf8fbe85ef773994cb43764.gif)
![基于linux的webserver編程實例_第5頁](http://file4.renrendoc.com/view/73ac31a1b2cf8fbe85ef773994cb4376/73ac31a1b2cf8fbe85ef773994cb43765.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
.z...linu*嵌入式系統(tǒng)期末作業(yè)選題:webserver編程實例學號:姓名:班級:郵箱:成績:2011年11月29日目錄1、代碼解析:3〔1〕inde*.html文件解析:3〔2〕adc.html文件解析:3〔3〕Adc.*ml文件代碼解析:5〔4〕run.c文件代碼解析:5〔5〕stop.c文件代碼解析:82、程序完成的主要功能:93、必要的操作步驟:104、執(zhí)行程序的結果〔效果圖〕:125、本門課程體會及建議:131、代碼解析:〔1〕inde*.html文件解析:<html> <head> <title>AD遠程采集實驗</title>/*設置網(wǎng)頁標題*/ </head> <bodybgcolor="cyan">/*設置頁面背景顏色為青綠色*/ <h1align="center">AD遠程采集實驗</h1>/*定義最大標題并居中*/ <palign="center">2008-12-11</p>/*設置日期居中*/<formaction="33/cgi-bin/run.cgi">/*生成一個到"33/cgi-bin/run.cgi"的表單*/ <palign="center"><inputtype="submit"value="查看"></p>/*生成一個“查看〞按鈕*/ </form> </body></html>〔2〕adc.html文件解析:<html> <head> <scripttype="te*t/javascript">/*創(chuàng)立腳本的格式為javascript*/ var*MLdoc;/*創(chuàng)立*MLdoc對象*/functionload*ML(){ if(window.Active*Object)/*判斷是否支持Active*控件*/ { *MLdoc=newActive*Object("Microsoft.*MLDOM");/*實例化一個Active*控件*/ *MLdoc.async=false; *MLdoc.load("adc.*ml");/*讀取*ml文件*/ getmessage();/*函數(shù)調(diào)用*/ } setTimeout("load*ML()",1000);/*頁面每1000毫秒刷新一次*/}functiongetmessage()/*獲取旋鈕值*/{ document.getElementById("ch_0").innerHTML=*MLdoc.getElementsByTagName("ch_0")[0].childNodes[0].nodeValue;/*從*ml文件里取出ch_0的值寫入網(wǎng)頁中id為ch_0的文件中*/ document.getElementById("ch_1").innerHTML=*MLdoc.getElementsByTagName("ch_1")[0].childNodes[0].nodeValue;/*從*ml文件里取出ch_1的值寫入網(wǎng)頁中id為ch_1的文件中*/ document.getElementById("ch_2").innerHTML=*MLdoc.getElementsByTagName("ch_2")[0].childNodes[0].nodeValue;/*從*ml文件里取出ch_2的值寫入網(wǎng)頁中id為ch_2的文件中*/}</script></head><bodyonload="load*ML()"bgcolor="cyan">/*背景顏色是青綠色*/ <h1align="center">AD遠程測試實驗</h1>/*定義最大標題并居中*/ <formalign="center">/*生成表單并居中*/ <tablewidth="50%"border="1"align="center">/*生成寬度是屏幕的50%,表格線條粗細為1的表格并居中*/ <thalign="center"colspan=2>AD遠程測試實驗</th>/*表頭單元格內(nèi)容為"AD遠程測試實驗"并居中*/ <tr> <tdalign="center">通道0</td> <tdalign="center"><spanid="ch_0"></span>V</td>/*設置id為ch_0并居中*/ </tr> <tr> <tdalign="center">通道1</td> <tdalign="center"><spanid="ch_1"></span>V</td>/*設置id為ch_1并居中*/ </tr> <tr> <tdalign="center">通道2</td> <tdalign="center"><spanid="ch_2"></span>V</td>/*設置id為ch_2并居中*/ </tr> </table> </form><formaction="33/cgi-bin/stop.cgi">/*生成一個到"33/cgi-bin/stop.cgi"的表單*/ <palign="center"><inputtype="submit"value="停頓采集"/></p> </form>/*生成一個“停頓采集〞按鈕并居中*/</body></html>〔3〕Adc.*ml文件代碼解析:<?*mlversion="1.0"encoding="UTF-8"?><measure> <ch_0>0.0</ch_0>/*設置ch_0的初始值為0.0*/ <ch_1>1.0</ch_1>/*設置ch_1的初始值為1.0*/ <ch_2>3.0</ch_2>/*設置ch_2的初始值為3.0*/ <stop>A</stop></measure>/*解析通道中的AD數(shù)據(jù)*/〔4〕run.c文件代碼解析:*include<stdio.h>*include<ftl.h>*include<sys/ioctl.h>*include<unistd.h>*include<time.h>voidgetdata(char*buff,intadcfd,intret)/*AD數(shù)據(jù)的采集,并進展格式轉換*/{ inttemp; inti=0,j; for(j=0;j<3;j++)/*控制通道的循環(huán)*/ { ioctl(adcfd,j,0);/*控制I/O通道*/ read(adcfd,&temp,sizeof(int));/*將開發(fā)板的值返回到temp*/ temp+=16; temp=temp/31; for(;i<ret;i++) { if((buff[i]=='<')&&(buff[i+1]=='c')&&(buff[i+2]=='h'))break;/*判斷字符串"<ch"是否出現(xiàn),假設出現(xiàn),跳出循環(huán),進展數(shù)據(jù)轉換;假設沒有,繼續(xù)循環(huán).*/} buff[i+6]=(temp/10)+48;buff[i+8]=(temp%10)+48;/*獲取數(shù)據(jù)賦值給temp,并進展格式的轉化*/ i++; }} voidlock_set(intfd,inttype)/*文件上鎖函數(shù),在主程序中將被調(diào)用*/{ structflocklock;/*定義構造體flocklock*/ lock.l_whence=SEEK_SET; lock.l_start=0; lock.l_len=0; lock.l_type=type; while(1) { if((ftl(fd,F_SETLK,&lock))==0) return;/*判斷文件是否被鎖定,假設鎖定,則退出;否則,繼續(xù)鎖定*/ }}intmain(void){pid_tpc; intadcfd,*mlfd,ret;unsignedcharbuff[150]; inti; pc=fork();/*創(chuàng)立主線程,用于打印一些HTML代碼,使頁面跳轉到adc.html頁面去,打印完HTML信息后該線程就退出*/ if(pc<0) { printf("forkerror!\n"); return-1;/*判斷進程,假設pc<0,打印"forkerror!",假設pc>0,打印HTML文檔*/ } elseif(pc>0) {/*打印HTML文檔*/ printf("Content-type:te*t/html\n\n"); printf("<bodybgcolor=\"cyan\">\n"); printf("<meta-equiv=\"refresh\"content=\"1;url=33/adc.html\">");/*使頁面跳轉到adc.html頁面*/ printf("</body>"); e*it(0); } else { setsid();/*脫離父進程*/ chdir("/");/*改變當前目錄*/ umask(0);/*重設文件權限掩碼*/ for(i=0;i<65535;i++) close(i);/*關閉設備文件描述符*/ adcfd=open("/dev/adc",O_RDWR);/*翻開adc設備文件*/ if(adcfd<0) { printf("Cannotopenadcdevice!\n");/*判斷能不能翻開adc設備文件,假設翻開繼續(xù)下面程序;反之,打印出不能翻開adc設備*/ returnadcfd; } while(1) { while(1) { *mlfd=open("/var//adc.*ml",O_RDWR);/*翻開adc.*ml文件*/ if(*mlfd<0) { continue; } else { lock_set(*mlfd,F_WRLCK);/*給文件上鎖,防止其他進程對該文件進展寫操作*/ break; } } ret=read(*mlfd,buff,150);/*將*ml值讀到buff*/ for(i=0;i<ret;i++) if(buff[i]=='$')/*如果為'$',則說明用戶按下了"停頓采集"鍵,完畢程序*/ { buff[i]='A'; lseek(*mlfd,0,SEEK_SET);/*移動文件指針*/ write(*mlfd,buff,ret);/*寫入修改后的值*/ lock_set(*mlfd,F_UNLCK);/*給文件上鎖,阻止被刪除*/ close(*mlfd); close(adcfd); return0; } getdata(buff,adcfd,ret); lseek(*mlfd,0,SEEK_SET); write(*mlfd,buff,ret);/*采集數(shù)據(jù)并把數(shù)據(jù)顯示在頁面上,以便于監(jiān)測*/ lock_set(*mlfd,F_UNLCK);/*給*ml文件上鎖*/ close(*mlfd); sleep(1); } close(*mlfd); close(adcfd); return0; }}〔5〕stop.c文件代碼解析:*include<stdio.h>*include<unistd.h>*include<sys/ioctl.h>*include<ftl.h>voidlock_set(intfd,inttype){ structflocklock;/*定義flocklock構造體*/ lock.l_whence=SEEK_SET;/*讀寫位置指向文件頭*/ lock.l_start=0; lock.l_len=0; lock.l_type=type; while(1) { if((ftl(fd,F_SETLK,&lock))==0) return;/*判斷文件是否被鎖定,假設鎖定,則退出;否則,繼續(xù)鎖定*/ }}intmain(void){ intfd,ret; charbuff[150]; inti;/*打印HTML文檔*/printf("Content-type:te*t/html\n\n");printf("<bodybgcolor=\"cyan\">\n"); printf("<meta-equiv=\"refresh\"content=\"1;url=33\">\n");/*停留在此頁面,不斷刷新*/ printf("</body>"); while(1) {fd=open("../adc.*ml",O_RDWR);/*翻開adc.*ml文件*/if(fd<0) continue;/*判斷文件是否翻開,假設沒翻開,繼續(xù);假設翻開,給文件上鎖*/ else { lock_set(fd,F_WRLCK);/*給文件上鎖,防止其他進程對該文件進展寫操作*/break; } } ret=read(fd,buff,150);/*將標志文件中的值讀到buff*/ for(i=0;i<ret;i++) if((buff[i]=='s')&&(buff[i+1]=='t')&&(buff[i+2]=='o')&&(buff[i+3]=='p'))/*判斷是否出現(xiàn)字符串"stop",假設出現(xiàn),跳出循環(huán),執(zhí)行下面操作;反之,一直循環(huán)*/ break; buff[i+5]='$';/*如果為‘$’,則說明用戶按下了“停頓采集〞鍵,完畢程序,否則繼續(xù)執(zhí)行*/ lseek(fd,0,SEEK_SET); write(fd,buff,ret);/*寫文件,改變文件內(nèi)容,以便視頻采集程序能檢測到該變化*/ lock_set(fd,F_UNLCK);/*給文件上鎖*/ close(fd);/*關閉設備文件描述符*/ return0;}2、程序完成的主要功能:(1)inde*.html是我們在IE瀏覽器的地址欄中輸入效勞器IP地址時所看到的頁面,當點擊查看按鈕時,頁面會跳轉到數(shù)據(jù)采集的顯示頁面,同時,效勞器的后臺程序也會開場運行,對我們的三個輸入通道進展采集,是索引網(wǎng)頁,是讓用戶進展使用(2)adc.html這個文件的頁面就是我們在按下上面的Inde*.html的查看按鈕后跳轉過來的,它分別顯示了我們的開發(fā)板上的三個AD通道的采樣值,是為數(shù)據(jù)采集而制作的網(wǎng)頁(3)Adc.*ml后臺效勞程序也會對這個文件進展讀寫,從而到達效勞器和用戶進展數(shù)據(jù)交換的目的。(4)Run.c這個程序是在點擊第一個頁面(inde*.html)上的“查看〞按鈕后執(zhí)行的。程序的開場會調(diào)用fork來創(chuàng)立兩個線程:一個主線程,用于打印一些HTML代碼,使頁面跳轉到我們的adc.html頁面去,打印完HTML信息后該線程就退出;另一個子線程執(zhí)行真正的AD數(shù)據(jù)采集,它讀取三個通道的AD值,并對讀出來的值進展轉換,并將讀取的結果寫入adc.*ml文件中,供用戶檢索。同時,這個線程還會檢查adc.*ml的<stop>標簽中的內(nèi)容,如果為’$’,則說明用戶按下了“停頓采集〞鍵,則就完畢程序的執(zhí)行,否則繼續(xù)執(zhí)行。(5)Stop.c該程序的實現(xiàn)比擬簡單,當用戶按下數(shù)據(jù)采集頁面的“停頓采集〞按鈕后,會執(zhí)行這個程序。本程序是改變adc.*ml文件中的<stop>標簽中的內(nèi)容,在其中插入一個’$’字符,當我們的數(shù)據(jù)采集程序檢測到這個變化后,就會停頓采集。3、必要的操作步驟:〔1〕在實驗目錄下為本實驗創(chuàng)立webserver目錄〔2〕進入webserver目錄,使用編輯器vim建立文件webserver,將實驗指導中有關代碼粘貼過來〔3〕我們的光盤中提供了boa的源代碼,解壓該文件〔4〕編譯BOA效勞器和CGI程序〔5〕配置BOA效勞器,另外在實驗目錄的/etc目錄下還需要一個mime.types文件,直接從主機上的/etc目錄拷貝?!?〕啟動開發(fā)板,制作完成rootfs,通過mkcramfs工具生成root.cramfs只讀文件系統(tǒng),1〕確認serverip是Linu*虛擬機的IP地址;2)將生成的uImage文件拷貝到tftpboot目錄下;3〕在ARM開發(fā)板上運行命令;把uImage文件下載到ARM開發(fā)板的SDRAM中0*30008000開場的空間中;擦除NandFlash中起始地址為0*380000,大小為0*400000的空間;把SDRAM中0*30008000開場的內(nèi)容寫入NandFlash0*380000開場的空間內(nèi),大小為0*400000〔7〕[up-class2410*]setenvbootcmdnandread0*300080000*800000*250000\;bootm此項
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年重交瀝青項目資金申請報告代可行性研究報告
- 教育領域中環(huán)保教育的方法與實踐研究
- 軟件工程專業(yè)就業(yè)前景與職業(yè)規(guī)劃指導
- 語文教學中小學生批判性思維的培養(yǎng)途徑
- 小學德育活動的信息化教學策略研究
- 編程教育助力孩子成長科技時代的必由之路
- 緊急情況下用電設備的快速反應與急救措施
- 質(zhì)量管理體系在教育行業(yè)的推廣與應用
- 2024年不見面審批投資申請報告代可行性研究報告
- 2025年蘇州百年職業(yè)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- 人教版《道德與法治》四年級下冊教材簡要分析課件
- 2023年MRI技術操作規(guī)范
- 辦公用品、易耗品供貨服務方案
- 自行聯(lián)系單位實習申請表
- 醫(yī)療廢物集中處置技術規(guī)范
- 媒介社會學備課
- 2023年檢驗檢測機構質(zhì)量手冊(依據(jù)2023年版評審準則編制)
- 三相分離器原理及操作
- 新教科版五年級下冊科學全冊每節(jié)課后練習+答案(共28份)
- 葫蘆島尚楚環(huán)保科技有限公司醫(yī)療廢物集中處置項目環(huán)評報告
- 全國物業(yè)管理項目經(jīng)理考試試題
評論
0/150
提交評論