ARM+linux下的web終端認(rèn)證與設(shè)計_第1頁
ARM+linux下的web終端認(rèn)證與設(shè)計_第2頁
ARM+linux下的web終端認(rèn)證與設(shè)計_第3頁
ARM+linux下的web終端認(rèn)證與設(shè)計_第4頁
ARM+linux下的web終端認(rèn)證與設(shè)計_第5頁
已閱讀5頁,還剩22頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

華中農(nóng)業(yè)大學(xué)學(xué)士學(xué)位論文(設(shè)計)PAGEXPAGE23目錄TOC\o"1-3"\u摘要 I關(guān)鍵詞 IDesignandimplementationofWebAuthenticationterminalonARM+Linuxplatform IIAbstract II前言 11ARMLinux平臺和Web應(yīng)用概述 11.1ARMLinux平臺的概述 11.2Web應(yīng)用概述 21.3實驗環(huán)境 22Web開發(fā)環(huán)境搭建 32.1主機(jī)上移植前配置 32.1.1主機(jī)上安裝arm-linux-gcc編譯器 32.1.2配置boa服務(wù)器 32.1.3安裝Sqlite數(shù)據(jù)庫 42.2ARM開發(fā)板上的配置 52.2.1移植cgi程序 52.2.2移植boa服務(wù)器 62.2.3移植Sqlite數(shù)據(jù)庫 72.3Web環(huán)境測試 83ARM下Web設(shè)計與實現(xiàn) 93.1編寫CGI程序 93.1.1整體框架設(shè)計 93.1.2各功能模塊介紹 103.2實現(xiàn)對Sqlite數(shù)據(jù)庫操作 103.2.1查詢功能實現(xiàn) 103.2.2插入、更新功能 113.2.3刪除功能實現(xiàn) 123.3應(yīng)用瀏覽器訪問 123.3.1移植程序到開發(fā)板 123.3.2瀏覽器訪問程序 13結(jié)束語 15參考文獻(xiàn) 16致謝 17附錄 18ARM+Linux平臺下Web認(rèn)證終端設(shè)計與實現(xiàn)摘要基于嵌入設(shè)備在生活中應(yīng)用越來越廣泛,web應(yīng)用也有其很多優(yōu)點,在嵌入式設(shè)備下實現(xiàn)web設(shè)計,對這些嵌入式設(shè)備監(jiān)控將更加方便。本文主要的目的是在Web下實現(xiàn)對嵌入式設(shè)備的監(jiān)控,以ARM9S3C2410嵌入式開發(fā)板為核心,在Fadora8下設(shè)置開發(fā)環(huán)境,編譯可執(zhí)行文件,然后下載到開發(fā)板上,以此來實現(xiàn)嵌入式下的Web開發(fā)。主要方法是,在Fadora8下安裝arm-linux-gcc交叉編譯環(huán)境,配置sqlite數(shù)據(jù)庫、及boa服務(wù)器使其可以在ARM9S3C2410運行,然后通過c語言編寫CGI程序,編譯后的程序可以通過瀏覽器訪問。本文實現(xiàn)了在瀏覽器下ARM9S3C2410的監(jiān)控,可以推廣到其他的嵌入式設(shè)備,對嵌入式Web的開發(fā)有很大的意義。關(guān)鍵詞ARM9S3C2410、交叉編譯、boa、sqlite、CGi編程

DesignandimplementationofWebAuthenticationterminalonARM+LinuxplatformAbstractEmbeddeddevicesbasedonwidelyappliedindailylife,webapplicationalsohasitsmanyadvantages,toachievethewebdesignofembeddeddevices,embeddeddevicessuchmonitoringwouldbemoreconvenient.ThepurposeofthispaperistobeachievedinWebmonitoringofembeddeddevicestotheembeddedARM9S3C2410developmentboardasthecore,underthesettingsinFadora8developmentenvironment,compiletheexecutablefile,andthendownloadedtothedevelopmentboard,inordertoachieveEmbeddedWebdevelopmentunder.ThemainmethodistoinstallinFadora8arm-linux-gcccross-compilerenvironment,configurationsqlitedatabase,andtheboaserversothatitcanrunintheARM9S3C2410,thenuseclanguageCGIprogram,compiledprogramscanaccessviabrowser.ThisachievedundertheARM9S3C2410browsermonitoring,canbeextendedtootherembeddeddevices,embeddedWebdevelopmenthasgreatsignificance.KeywordsARM9S3C2410、Cross-compilation、boa、sqlite、CGiPromgraming華中農(nóng)業(yè)大學(xué)學(xué)士學(xué)位論文(設(shè)計)前言隨著網(wǎng)絡(luò)信息技術(shù)的飛速發(fā)展.Web技術(shù)越來越多的用在控制領(lǐng)域,客戶端只需連接以太網(wǎng),取得訪問權(quán)限,就可以訪問服務(wù)器,查閱現(xiàn)場有關(guān)信息。并可以對服務(wù)器的操作進(jìn)行控制,給維護(hù)和管理工作帶來方便。而web應(yīng)用是互聯(lián)網(wǎng)中的首選技術(shù),它具有面相對象、平臺無關(guān)、多線程、分布、安全等特點,而這些特點恰恰滿足了互聯(lián)網(wǎng)發(fā)展的需求。嵌入式系統(tǒng)通常指用于家庭或辦公的小型高科技設(shè)備,有的可以拿在手上,有的可以裝在汽車?yán)?,甚至太空車中。一般嵌入式設(shè)備中的應(yīng)用和操作系統(tǒng)是一個程序,并固化在rom或閃存內(nèi)。嵌入式設(shè)備以其小巧靈活將成為下一個世紀(jì)的時尚由于web技術(shù)和嵌入式系統(tǒng)兩者有各自的優(yōu)勢,將兩者結(jié)合起來發(fā)揮各自的優(yōu)勢,為遠(yuǎn)端數(shù)據(jù)監(jiān)控的發(fā)展開辟了一片天空,將成為未來嵌入式發(fā)展的主流。但是,傳統(tǒng)的Web技術(shù)路線方案不能直接用于嵌入式設(shè)備中。傳統(tǒng)Web服務(wù)器以具有高運算處理能力和海量存儲容量的工作站或PC機(jī)為硬件工作平臺,以非實時操作系統(tǒng)為軟件工作平臺,其上運行的是大型復(fù)雜的服務(wù)器程序,典型的如基于WindowsNT的IIS(InternetInformationServer)、基于Unix的ApacheWebServer等,服務(wù)器的這種高檔配置方案對于存儲容量較小的嵌入式設(shè)備而言是不現(xiàn)實的要求?;贏RM+Linux的嵌入式技術(shù)的Web設(shè)計的出現(xiàn)為解決以上問題開辟了一條嶄新途徑。應(yīng)用嵌入式服務(wù)器boa以ARM9C2410開發(fā)板為硬件工作平臺,以嵌入式實時多任務(wù)操作系統(tǒng)(RTOS)為軟件工作平臺,其上運行小型精簡的服務(wù)器程序。已有嵌入式Web設(shè)計的成功開發(fā)案例主要集中于通信領(lǐng)域中的電梯監(jiān)控、嵌入式設(shè)備顯示等產(chǎn)品,這類產(chǎn)品的共同特征是只能動態(tài)的顯示設(shè)備中的數(shù)據(jù),而不能對嵌入式設(shè)備中的數(shù)據(jù)進(jìn)行動態(tài)的修改或刪除等操作,而現(xiàn)在應(yīng)用的很多嵌入式設(shè)備需要對其本身監(jiān)控。本文研究的嵌入式Web設(shè)計與實現(xiàn)需要對嵌入式設(shè)備中的數(shù)據(jù)進(jìn)行相關(guān)操作,目前這方面的研究報導(dǎo)甚為少見。

本文的組織結(jié)構(gòu)是在介紹ARMLinux平臺的基本知識和Web設(shè)計模式的基礎(chǔ)上,詳細(xì)闡述嵌入式的開發(fā)構(gòu)架的體系結(jié)構(gòu)和基本原理。并通過B/S結(jié)構(gòu)的提出,介紹了boa服務(wù)器、sqlite數(shù)據(jù)庫的基本知識。最后進(jìn)行Web框架設(shè)計,并詳細(xì)闡述了這個框架的兩個核心模塊:編寫cgi程序和移植文件并通過瀏覽器瀏覽,深入研究了嵌入式下的Web開發(fā),并對開發(fā)方式進(jìn)行了研究與總結(jié),確定了整體開發(fā)方案。最后通過程序在開發(fā)板上的運行,以展示了這些開發(fā)成果的具體應(yīng)用。1ARMLinux平臺和Web應(yīng)用概述1.1ARMLinux平臺的概述ARM(AdvancedRISCMachines)是微處理器行業(yè)的一家知名企業(yè),設(shè)計了大量高性能、廉價、耗能低的RISC處理器、相關(guān)技術(shù)及軟件。經(jīng)常我們所說ARM一般指ARM處理器,有耗電少功能強(qiáng)、16位/32位雙指令集和眾多合作伙伴等特點。Linux,是一套免費使用和自由傳播的類Unix操作系統(tǒng),它主要用于基于X86系列CPU的計算機(jī)上。這個系統(tǒng)是由世界各地的成千上萬的程序員設(shè)計和實現(xiàn)的。其目的是建立不受任何商品化軟件的版權(quán)制約的、全世界都能自由使用的Unix兼容產(chǎn)品。正是由于ARM和Linux的這些特點,本文選用的是ARM+Linux平臺作為開發(fā)環(huán)境,PC機(jī)上進(jìn)入Fedora操作系統(tǒng),安裝arm-linux-gcc編譯器,配置可在ARM開發(fā)板上運行的服務(wù)器boa和數(shù)據(jù)庫sqlite3,將sqlite3和boa移植到ARM開發(fā)板上,這樣就構(gòu)成了ARMLinux開發(fā)平臺。Linux源代碼開源,可以對其進(jìn)行修改,有助于開發(fā)環(huán)境的配置;ARM處理器功能強(qiáng)大、應(yīng)用廣泛。鑒于這些優(yōu)點,本文選用ARM+Linux作為開發(fā)平臺。1.2Web應(yīng)用概述應(yīng)用程序有兩種模式C/S、B/S。C/S是客戶端/服務(wù)器端程序,也就是說這類程序一般獨立運行。而B/S就是瀏覽器端/服務(wù)器端應(yīng)用程序,這類應(yīng)用程序一般借助IE等瀏覽器來運行。WEB應(yīng)用程序一般是B/S模式。本文所應(yīng)用的是B/S模式,即瀏覽器/服務(wù)器模式,借助瀏覽器來運行CGI程序。B/S結(jié)構(gòu)是對C/S結(jié)構(gòu)的一種改進(jìn),在這種結(jié)構(gòu)下,用戶工作界面是通過WWW瀏覽器來實現(xiàn),極少部分事務(wù)邏輯在前端(Browser)實現(xiàn),但是主要事務(wù)邏輯在服務(wù)器端(Server)實現(xiàn)。這樣大大簡化了客戶端電腦載荷,減輕了系統(tǒng)維護(hù)與升級的成本和工作量,降低了用戶的總體成本(TCO)。這種結(jié)構(gòu)可以進(jìn)行一次性到位的開發(fā),能實現(xiàn)不同的人員,從不同的地點,以不同的接入方式訪問和操作共同的數(shù)據(jù)庫;它能有效地保護(hù)數(shù)據(jù)平臺和管理訪問權(quán)限,服務(wù)器數(shù)據(jù)庫也很安全。瀏覽器/服務(wù)器架構(gòu)(Browser/Server,簡稱B/S)能夠很好地應(yīng)用在廣域網(wǎng)上,在各個方面應(yīng)用越來越廣泛。相對于其他幾種應(yīng)用程序體系結(jié)構(gòu),瀏覽器/服務(wù)器架構(gòu)有如下優(yōu)點:(1)這種架構(gòu)采用Internet上標(biāo)準(zhǔn)的通信協(xié)議(通常是TCP/IP協(xié)議)作為客戶機(jī)同服務(wù)器通信的協(xié)議。這樣可以使位于Internet任意位置的人都能夠正常訪問服務(wù)器。對于服務(wù)器來說,通過相應(yīng)的Web服務(wù)和數(shù)據(jù)庫服務(wù)可以對數(shù)據(jù)進(jìn)行處理。對外采用標(biāo)準(zhǔn)的通信協(xié)議,以便共享數(shù)據(jù)。(2)在服務(wù)器上對數(shù)據(jù)進(jìn)行處理,只有處理的結(jié)果生成網(wǎng)頁,可以方便客戶端直接下載。(3)在客戶機(jī)上對數(shù)據(jù)的處理被進(jìn)一步簡化,將瀏覽器作為客戶端的應(yīng)用程序,以實現(xiàn)對數(shù)據(jù)的顯示。不再需要為客戶端單獨編寫和安裝其他類型的應(yīng)用程序。這樣,在客戶端只需要安裝一套內(nèi)置瀏覽器的操作系統(tǒng),如Window98或Windows2000或直接安裝一套瀏覽器,就可以實現(xiàn)服務(wù)器上數(shù)據(jù)的訪問。而瀏覽器是現(xiàn)在計算機(jī)的標(biāo)準(zhǔn)設(shè)備。1.3實驗環(huán)境 在本文所用的環(huán)境是在Fadora8進(jìn)行開發(fā),配置交叉編譯、boa服務(wù)器、sqlite在開發(fā)板上的運行的文件,然后用C語言編寫CGI程序,通過交叉編譯生成在開發(fā)板上可運行的文件。將開發(fā)的程序、boa服務(wù)器及sqlite數(shù)據(jù)庫一起移植到開發(fā)板,通過配置在ARM9S3C2410開發(fā)板上運行。 實驗所需儀器:硬件PC機(jī)一臺裝有Fadora8操作系統(tǒng)、ARM9S3C2410開發(fā)板軟件sqlite-3.6.16.tar.gz、boa-0.94.13.tar.gz2Web開發(fā)環(huán)境搭建2.1主機(jī)上移植前配置ARM上所需要的是可運行的程序,其配置需要在PC機(jī)上完成。2.1.1主機(jī)上安裝arm-linux-gcc編譯器交叉編譯就是在一個平臺上生成另一種平臺上可運行的代碼,在PC機(jī)上編譯,生成可在arm開發(fā)板上的可執(zhí)行文件。本次研究是在Linux下安裝arm-linux交叉編譯器,通過編譯生成可以運行在S3C2410開發(fā)板上的可執(zhí)行文件。下載arm-linux-gcc-3.4.1將其安裝到PC機(jī)的/opt目錄下,實驗交叉編譯環(huán)境已安裝好。2.1.2配置boa服務(wù)器Boa是一個非常小巧的嵌入式Web服務(wù)器,其可執(zhí)行代碼只有約60KB。它是一個個單任務(wù)Web服務(wù)器,只能依次完成用戶的請求,Boa支持CGI,能夠為CGI程序fork出一個進(jìn)程來執(zhí)行。boa服務(wù)器可以移植到嵌入式設(shè)備,通過運行CGI腳本和Sqlite數(shù)據(jù)庫可以實現(xiàn)動態(tài)網(wǎng)頁,通過瀏覽器對嵌入式設(shè)備進(jìn)行監(jiān)控和管理,方便實用。安裝流程:1)、在/下載最新發(fā)行版本:0.94.13下載boa-0.94.13.tar.gz到主機(jī)root文件夾中。解壓:#tarxzfboa-0.94.13.tar.gz打開文件夾boa-0.94.13下的src文件夾#cd/boa-0.94.13/src#./configure執(zhí)行以上命令在src文件夾中生成Makefile文件修改Makefile文件CC=gcc修改為CC=arm-linux-gccCPP=gcc-E修改為CPP=arm-linux-gcc-E運行make,在src文件夾下生成boa,然后剝?nèi)フ{(diào)試信息#make#arm-linux-stripboa進(jìn)行boa配置,使其支持CGI程序。打開boa-0.94.13文件夾下的boa.conf#vimboa.conf將監(jiān)聽端口改為8083(PC機(jī)上裝有Apache服務(wù)器其端口號為80,防止沖突)Port80改為Port8083Groupnobody改為Group0#ServerName.here去掉注釋修改為ServerName.hereMimeTypes/etc/mime.types修改為MimeTypes/etc/var/mime.typesCGI腳本的目錄更改為ScriptAlias/cgi-bin//var/www/cgi-bin/用戶可以根據(jù)自己需要,對boa.conf進(jìn)行修改,但要保證其他的輔助文件和設(shè)置必須和boa.conf里的配置相符,不然Boa就不能正常工作。我們還需要創(chuàng)建日志文件所在目錄/var/log/boa,創(chuàng)建HTML文檔的主目錄/var/www,為了方便將boa移植到arm開發(fā)板,將mime.types文件拷貝到/etc/var目錄下,創(chuàng)建CGI腳本所在目錄/var/www/cgi-bin/,mime.types文件用來指明不同文件擴(kuò)展名對應(yīng)的MIME類型,可直接從Linux主機(jī)上拷貝一個,大部分也都是在主機(jī)的/etc目錄下。2.1.3安裝Sqlite數(shù)據(jù)庫Sqlite是一種嵌入式數(shù)據(jù)庫,是一個采用C語言開發(fā)的嵌入式數(shù)據(jù)庫引擎,其目標(biāo)是盡量簡單,它拋棄了傳統(tǒng)企業(yè)級數(shù)據(jù)庫的種種復(fù)雜特性,只實現(xiàn)那些對于數(shù)據(jù)庫而言非常必要的功能。由于其具有功能強(qiáng)大、接口簡單、速度快、占用空間小這樣一些特殊的優(yōu)點,因此特別適合于應(yīng)用在嵌入式環(huán)境中。本文采用的是Sqlite-3.3.16版本。其移植過程:從下載sqlite-3.3.16.tar.gz,將其移到/root目錄下解壓#tarzxvfsqlite-3.3.16.tar.gz在root目錄下新建sqlite文件夾。解壓后生成sqlite-3.3.16子目錄打開sqlite-3.3.16 目錄下的src目錄運行./configure#cd/sqlite-3.3.16/src#./configure運行后生成Makefile文件,打開Makefile,進(jìn)行以下修改#VimMakefileTOP=../sqlite將其修改為:TOP=.TCC=gcc-O6將其修改為:TCC=arm-linux-gcc-O6AR=arcr將其修改為:AR=arm-linux-arcrRANLIB=ranlib將其修改為:RANLIB=arm-linux-ranlibMKSHLIB=gcc-shared將其修改為:MKSHLIB=arm-linux-gcc-shared注釋掉下面這一行:TCL_FLAGS=-I/home/drh/tcltk/8.4linux注釋掉下面這一行:LIBTCL=/home/drh/tcltk/8.4linux/libtcl8.4g.a-lm-ldl接下來,還需修改main.mk文件找到LIBOBJ+=下面鏈接的tcl.o文件,去掉tcl.o,這樣編譯的時候就不會編譯Sqlite3的tcl綁定。運行make#make編譯完成之后,在sqlite-3.3.16目錄下生成可以執(zhí)行的文件sqlite3、庫函數(shù)libsqlite3.a和頭文件sqlite3.h,這就是在開發(fā)板上可以直接運行的可執(zhí)行文件。剝?nèi)フ{(diào)試信息,#filesqlite3#arm-linux-stripsqlite3接下來就可以移植到開發(fā)板了,移植的文件有sqlite3、libsqlite3.a和頭文件sqlite3.h。2.2ARM開發(fā)板上的配置2.2.1移植cgi程序CGI(CommonGateInterface)全稱是“公共網(wǎng)關(guān)接口”,HTTP服務(wù)器與你的或其它機(jī)器上的程序進(jìn)行“交談”的一種工具,其程序須運行在網(wǎng)絡(luò)服務(wù)器上。CGI可以用任何一種語言編寫,只要這種語言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量。由于C語言有較強(qiáng)的平臺無關(guān)性,本論文應(yīng)用的是c語言編寫CGI程序,在pc機(jī)上編寫CGI程序通過交叉編譯生成可在arn-Linux平臺下運行的程序,應(yīng)用服務(wù)器boa、數(shù)據(jù)庫sqlite實現(xiàn)動態(tài)網(wǎng)頁,通過瀏覽器對arm監(jiān)控。用c語言編寫CGI程序,在主機(jī)上通過arm-linux-gcc編譯生成.cgi文件,此文件可以直接在arm上運行,需要移植的僅是編譯好的可在arm上運行的文件。編譯好文件,通過ftp傳送到開發(fā)板的指定位置上,該位置和服務(wù)器和數(shù)據(jù)庫的設(shè)置有關(guān),下面會詳細(xì)介紹。2.2.2移植boa服務(wù)器在Linux下編譯生成可在開發(fā)板山的運行的服務(wù)器boa,需要boa、mime.types和配置文件boa.conf。Mime.types文件在arm開發(fā)板上所放的位置與boa.conf中的設(shè)置有關(guān),本文是將其放在了/etc/boa目錄下,可根據(jù)需要更改設(shè)置,在boa.conf中設(shè)置。將要移植的文件放在/root目錄下,包括可運行的boa、配置文件boa.conf、指明不同文件擴(kuò)展名的mime.types。移植過程:以ftp的方式從主機(jī)上下載所要移植的boa服務(wù)器及運行時所需的文件。首先要連接主機(jī)與arm開發(fā)板,用串口線、網(wǎng)線。具體移植過程如下:1、打開超級終端查看串口設(shè)置輸入命令minicom-s#minicom-s出現(xiàn)配置菜單:選serialportsetup進(jìn)入串口配置輸入A配置串口驅(qū)動為/dev/ttyS0確保串口為ttyS0輸入E配置速率為1152008N1輸入F將HardwareFlowControl設(shè)為NO回車保存為默認(rèn)設(shè)置退出。2、打開超級終端輸入minicom啟動串口#minicom進(jìn)入啟動界面,啟動后進(jìn)入arm開發(fā)板,可輸入-ls查看開發(fā)板上的文件夾。然后設(shè)置開發(fā)板與主機(jī)連接端口的ip,用以建立ftp連接,命令如下:#ifconfigeth023這樣arm開發(fā)板與主機(jī)連接的端口ip就是23,可以輸入ifconfig查看ip是否改變。打開另一個超級終端,應(yīng)用ifconfig修改主機(jī)ip#ifconfigeth35輸入ifconfig查看是否更改,若沒有,重新輸入命令設(shè)置。修改成功后,應(yīng)用ping命令查看主機(jī)與開發(fā)板是否連接。#ping23有數(shù)據(jù)接收則連接成功,接下來就可以進(jìn)行數(shù)據(jù)傳輸了,要移植的文件默認(rèn)放在/root目錄下。4、建立ftp連接輸入ftp23今日ftp下,以root身份登錄,這樣直接進(jìn)入arm開發(fā)板。#ftp23>root>123456/root登錄所需密碼登錄后,打開arm開發(fā)板上所要移植的目錄,這里將boa服務(wù)器一直到/etc/var下,也可根據(jù)需要更改移植目錄。#cd/etc/tmp/tmp文件夾存放臨時文件應(yīng)用put命令下載boa到tmp#putboa轉(zhuǎn)到/etc目錄下創(chuàng)建boa文件夾,用以存放boa.conf文件#cd/etc#mkdirboa#cdboa#putboa.conf這樣boa的設(shè)置文件就放在了/etc/boa目錄下。然后創(chuàng)建另一boa文件夾用以存放日志錯誤,根據(jù)boa.conf中的設(shè)置將其存放在\etc\var\log\boa目錄下,也可以根據(jù)需要更改設(shè)置。#cd/etc/var#mkdirlog#cdlog#mkdirboa另外還需下mime.types文件到/etc/var目錄下,否則無法運行boa服務(wù)器。#cd/etc/var#putmime.types 通過第一個超級終端查看所需的文件是否已在arm開發(fā)板上,進(jìn)入boa的目錄下,輸入./boa查看boa服務(wù)器是否可在開發(fā)板上運行。#./boa#如此boa則可在開發(fā)板上運行了。2.2.3移植Sqlite數(shù)據(jù)庫在Linux下編譯生成可在開發(fā)板山的運行的數(shù)據(jù)庫sqlite3,需要sqlite3、libsqlite3.a和頭文件sqlite3.h。若libsqlite3.a和頭文件sqlite3.h不與sqlite3在同一目錄下,還需要設(shè)置環(huán)境變量,運行時要連接libsqlite3.a和程序要包含頭文件sqlite3.h。環(huán)境變量設(shè)置方法:#exportLD_LIBRARY_PATH=/etc/lib:$LD_LIBRARY_PATH/etc/lib為libsqlite3.a和頭文件sqlite3.h存儲路徑移植步驟如移植boa。為了方便運行,將sqlite3、libsqlite3.a和頭文件sqlite3.h通過ftp下載到同一目錄下,即開發(fā)板上的/etc/tmp下,這樣可以不需要設(shè)置環(huán)境變量來連接庫函數(shù)libsqlite3.a和頭文件sqlite3.h.。移植完畢后,測試sqlite是否可在開發(fā)板上運行,進(jìn)入sqlite3所在的目錄,輸入命令./sqlite3myDB.db。#./sqlite3myDB.db該命令是建立sqlite數(shù)據(jù)庫myDB.db,若出現(xiàn)SQLiteversion3.3.16Enter".help"forinstructionssqlite>則數(shù)據(jù)庫可在開發(fā)板上運行,接下來可通過SQL語句操作數(shù)據(jù)庫。首先在myDB.db數(shù)據(jù)庫中建立一張表格,在插入一條記錄,然后顯示表中的數(shù)據(jù)。sqlite>createtablestudent(idint,namechar);sqlite>insertintostudentvalues('1','zhdkagj');sqlite>select*fromstudent;1|zhdkagjsqlite>這樣sqlite可以在開發(fā)板上運行了。2.3Web環(huán)境測試服務(wù)器boa和數(shù)據(jù)庫sqlite移植到開發(fā)板后,對整體的開發(fā)板環(huán)境進(jìn)行測試,編寫簡單的CGI程序hello.c#include<stdio.h>intmain(){ Printf("<html>");Printf("<head>");Printf("<title>Works</title>");Printf("</head>");Printf("<body>");Printf("HelloCGI!!");Printf("</body>>");Printf("</html>");}通過在主機(jī)上編譯生成.CGI文件編譯命令#arm-linux-gcchelo.c-ohello.cgi設(shè)置arm開發(fā)板與主機(jī)連接端口的IP為23,將將生成的hello.cgi文件下載到開發(fā)板/etc/var/www/cgi-bin目錄下,進(jìn)入/etc/tmp目錄下啟動boa服務(wù)器,轉(zhuǎn)到瀏覽器輸入Http://23:8083/cgi-bin/hello.cgi頁面打開為HelloCGI??!環(huán)境運行正常,可以進(jìn)行web開發(fā)。3ARM下Web設(shè)計與實現(xiàn)本文的主要目的是在ARM下實現(xiàn)Web設(shè)計,進(jìn)而推廣到其他的嵌入式設(shè)備,使這些設(shè)備可以通過瀏覽器進(jìn)行監(jiān)控,這樣應(yīng)用起來非常方便。設(shè)計思路:首先,在PC機(jī)上配置好可在ARM上運行的服務(wù)器boa和數(shù)據(jù)庫sqlite3,然后移植到ARM上。其次,用c語言編寫CGI程序,其中包括通過瀏覽器顯示的html的界面、對數(shù)據(jù)庫的有關(guān)操作及參數(shù)的傳遞等等。最后,通過瀏覽器訪問界面對開發(fā)的功能進(jìn)行測試。3.1編寫CGI程序主要的程序包括顯示的界面,對sqlite數(shù)據(jù)庫的有關(guān)操作,包括查詢、插入、更新、刪除等操作,另外還包括參數(shù)的傳值等。3.1.1整體框架設(shè)計Select界面刪除結(jié)果提示界面Edit界面Select界面刪除結(jié)果提示界面Edit界面更新結(jié)果提示界面插入界面插入結(jié)果提示界面點擊delete點擊提交按鈕點Addnewdata點擊提交按鈕點擊edit3.1.2各功能模塊介紹設(shè)計的主要思想是實現(xiàn)對數(shù)據(jù)庫的有關(guān)操作,另外還包括個界面程序的編寫。顯示數(shù)據(jù)庫中的數(shù)據(jù)的界面此界面主要顯示數(shù)據(jù)庫中的數(shù)據(jù),包括對每條數(shù)據(jù)的相關(guān)操作,有更新、刪除操作更新內(nèi)容的界面根據(jù)數(shù)據(jù)庫中表格的結(jié)構(gòu)來建立更新界面,更新內(nèi)容是根據(jù)id來更新數(shù)據(jù),即id固定,根據(jù)id查看要更新的數(shù)據(jù)記錄,更新后數(shù)據(jù)經(jīng)過頁面參數(shù)傳遞到更新處理函數(shù),,經(jīng)此函數(shù)將更新記錄插入數(shù)據(jù)庫。插入界面的實現(xiàn)插入數(shù)據(jù)到數(shù)據(jù)庫的表格中,首先要知道數(shù)據(jù)庫表格中的個字段,界面是根據(jù)數(shù)據(jù)庫中的表格來設(shè)計,具體的實現(xiàn)方法見對數(shù)據(jù)庫的操作。各操作提示界面對數(shù)據(jù)庫操作(更新、刪除、插入)后,需要知道操作后的結(jié)果是否成功,這就需要點擊提交按鈕后,頁面自動轉(zhuǎn)到下一頁面,此頁面提示操作的結(jié)果。頁面顯示設(shè)計如下:3.2實現(xiàn)對Sqlite數(shù)據(jù)庫操作本文主要的設(shè)計是在ARM下實現(xiàn)Web設(shè)計,嵌入式Web設(shè)計的主要是后臺管理,對數(shù)據(jù)庫德操作是本文的核心內(nèi)容。3.2.1查詢功能實現(xiàn)查詢數(shù)據(jù)庫中的內(nèi)容主要是通過標(biāo)準(zhǔn)的SQL語句來實現(xiàn),對sqlite數(shù)據(jù)庫select語句一樣適用。查詢中主要用到的函數(shù):打開數(shù)據(jù)庫Sqlite3_open();對數(shù)據(jù)庫操作首先要打開數(shù)據(jù)庫,參數(shù)中指明數(shù)據(jù)庫所放的路徑獲得數(shù)據(jù)庫表中數(shù)據(jù)Sqlite3_get_table();關(guān)閉數(shù)據(jù)庫Sqlite3_close();對數(shù)據(jù)庫操作完后要記得關(guān)閉數(shù)據(jù)庫,否則程序運行可能會出現(xiàn)錯誤。主要用到的SQL語句Select*fromstudent;//查詢數(shù)據(jù)庫中student表中的數(shù)據(jù)若要單獨查詢某項數(shù)據(jù)增加select語句后加where即可。詳細(xì)代碼肩附錄1select.c。3.2.2插入、更新功能插入、更新是對數(shù)據(jù)庫管理的基本操作。插入操作的步驟是點擊Addnewdata進(jìn)入插入界面,在此界面輸入要插入的數(shù)據(jù),點擊提交按鈕到插入結(jié)果提示界面。插入操作的步驟是點擊edit進(jìn)入更新界面,在此界面輸入要更新的數(shù)據(jù),點擊提交按鈕到更新結(jié)果提示界面。插入操作實現(xiàn),通過form表單實現(xiàn)插入頁面,利用get傳遞參數(shù),點擊提交時轉(zhuǎn)去執(zhí)行插入操作的函數(shù),進(jìn)而將要插入的數(shù)據(jù)插入數(shù)據(jù)庫。Form表單實現(xiàn)插入界面如下:表單中包括要插入數(shù)據(jù)的屬性及要插入表格數(shù)據(jù)中的類型,通過action連接到插入處理函數(shù),這樣點擊提交按鈕后,就會直接轉(zhuǎn)到插入處理函數(shù),執(zhí)行插入操作。插入處理過程:1、打開要插入的數(shù)據(jù)庫myDB.db,應(yīng)用sqlite3_open();這里將數(shù)據(jù)庫要指明所放的路徑。將輸入的數(shù)據(jù)傳送到處理函數(shù),通過get方式傳遞參數(shù),get方式是將參數(shù)存放在環(huán)境變量 QUERY_STRING中,通過getenv("QUERY_STRING"),獲得所要傳遞的參數(shù)。這樣得到的是多個參 數(shù),還需要分離出所要的參數(shù),所用的方法:建立三個數(shù)組(數(shù)據(jù)庫的student表中只有三項 數(shù)據(jù),可根據(jù)表中數(shù)據(jù)項而定)分別存放要插入的數(shù)據(jù)。調(diào)用函數(shù)fflush(stdout);將傳遞的數(shù)據(jù)暫存緩沖區(qū)通過插入的語句將數(shù)據(jù)插入到數(shù)據(jù)制定的表中sprintf(sql1,"insertintostudentvalues('%s','%s','%s')",id,name,sex);Id,name,sex中存放傳遞過來的參數(shù)。最后關(guān)閉數(shù)據(jù)庫調(diào)用sqlite_close();這樣數(shù)據(jù)就成功的插入到數(shù)據(jù)庫中了,可根據(jù)select頁面查看結(jié)果。更新操作實現(xiàn),更新是根據(jù)id來更新要更新的數(shù)據(jù),即根據(jù)id找到你要更新的數(shù)據(jù),id是不能更改的。更新功能實現(xiàn)和插入相似,只不過更新多了一個要更新的內(nèi)容,其過程:調(diào)用sqlite_open()打開數(shù)據(jù)庫2、應(yīng)用sqlite_exe()查詢要更新的內(nèi)容填入要更新的內(nèi)容,通過get傳遞參數(shù)到更新處理函數(shù),方法如插入。4、通過sprintf(sql1,"updatestudentsetname='%s',sex='%s'where id='%s'",name,sex,id);更新所要更新的內(nèi)容。調(diào)用sqlite3_close()關(guān)閉數(shù)據(jù)庫。這樣要更新的數(shù)據(jù)就更新了,可根據(jù)select頁面查看結(jié)果。具體的程序間附錄2insert_cl.c、附錄3edit_cl.c3.2.3刪除功能實現(xiàn)刪除數(shù)據(jù)也是數(shù)據(jù)庫的一種基本操作,刪除操作實現(xiàn),刪除是根據(jù)id來刪除要刪除的數(shù)據(jù),即根據(jù)id找到你要刪除的數(shù)據(jù)。其過程:1、調(diào)用sqlite_open()打開數(shù)據(jù)庫2、應(yīng)用sqlite_exe()查詢要刪除的內(nèi)容3、找到的內(nèi)容,通過get傳遞參數(shù)到delete處理函數(shù),方法如插入。4、通過sprintf(sql1,"deletefromstudentwhereid='%s'",id)刪除所要刪除的內(nèi)容。5、調(diào)用sqlite3_close()關(guān)閉數(shù)據(jù)庫。這樣就刪除了數(shù)據(jù)庫中指定id的內(nèi)容,通過select查看刪除后的結(jié)果。詳細(xì)程序見附錄4delete.c3.3應(yīng)用瀏覽器訪問3.3.1移植程序到開發(fā)板將寫好的CGI程序在Linux下進(jìn)行編譯,編譯器用arm-linux-gcc編譯器,編譯命令#arm-linux-gcc-I/root/sqlite/src-L/root/sqlite/srcselect.c-oselect.cgi-lsqlite3-I/root/sqlite/src存放sqlite3.h的路徑-L/root/sqlite/src存放libsqlite.a的路徑生成的可執(zhí)行文件是select.cgi應(yīng)用此命令編譯寫好的CGI程序,主要的程序有select.c、edit.c、edit_cl.c、 insert.c、insert_cl.c、 delete.c。將這些C語言程序通過編譯生成相應(yīng)的可執(zhí) 行文件。然后將生成的.cgi文件移植到開發(fā)板,移植的方法是通過ftp建立連接,下載到開 發(fā)板上。首先連接好ARM開發(fā)板與主機(jī),進(jìn)入終端,輸入minicom打開串口,為其 設(shè)置IP,命令為#ifconfigeth023打開另一個超級終端,應(yīng)用ifconfig修改主機(jī)ip#ifconfigeth35這樣開發(fā)板就和主機(jī)連接起來了。把要傳送到開發(fā)板上的程序和服務(wù)器壓縮為var.tar.gz,此壓縮文件包括myDB.db、mime.types文件及兩個文件夾log和www,www文件夾內(nèi)又有cgi-bin文件夾,此文件夾內(nèi)有運行好的.cgi文件、boa服務(wù)器、sqlite3、libsqlite3.a。另外,將boa的配置文件壓縮為boa.tar.gz,其包括文件夾boa,文件夾內(nèi)有配置文件boa.conf,將其下載到/etc目錄下。通過ftp傳送到arm開發(fā)板上后,對壓縮文件進(jìn)行解壓:在/etc目錄下解壓boa.tar.gz#tarxzvfboa.tar.gz在/etc/var下解壓var.tar.gz#tarxzvfvar.tar.gz解壓完成后,運行所需的文件都已傳到開發(fā)板上。3.3.2瀏覽器訪問程序在開發(fā)板上運行程序,需要對程序設(shè)置權(quán)限,所以傳送到開發(fā)板上的文件都要設(shè)置權(quán)限。依次對開發(fā)板上的/etc/var/www/cgi-bin設(shè)置權(quán)限,這里設(shè)置為可讀可寫可執(zhí)行,#chmod777etc#cdetc#chmod777var#cdvar#chmod777www#cdwww#chmod777cgi-bin#cdcgi-bin運行程序的文件夾設(shè)置后還要對cgi-bin文件夾中的文件賦予權(quán)限,也設(shè)置為777可讀可寫可執(zhí)行,方法如上。對文件賦予權(quán)限后,就可通過瀏覽器訪問開發(fā)板上的文件在瀏覽器地址欄輸入Http://23:8083/cgi-bin/select.cgi這樣瀏覽器就向開發(fā)板上的boa服務(wù)器發(fā)出申請,將select.cgi的內(nèi)容發(fā)送到瀏覽器,整個數(shù)據(jù)庫中的內(nèi)容就顯示在網(wǎng)頁上,然后根據(jù)程序中的鏈接、參數(shù)傳遞實現(xiàn)對數(shù)據(jù)庫的有關(guān)操作。至此,論文所作的程序和所需的文件已全部完成。

結(jié)束語隨著Internet技術(shù)的應(yīng)用越來越廣泛,在嵌人式設(shè)備上基于Web方式的應(yīng)用變得越來越重要。在ARM+Linux上搭建好web應(yīng)用程序的運行平臺,在嵌人式設(shè)備上運行一個支持腳本或CGI功能的Web服務(wù)器boa,能夠生成動態(tài)頁面,在用戶端只需要通過Web瀏覽器就可以對嵌入式設(shè)備進(jìn)行管理監(jiān)控和訪問,非常方便實用。在嵌入式設(shè)備的管理與交互中,這種基于Web方式的應(yīng)用將成為主流。本文所講主要是ARMLinux下的web設(shè)計與實現(xiàn),我們詳細(xì)闡述了基于ARMLinux平臺、服務(wù)器boa和數(shù)據(jù)庫sqlite框架的嵌入式web設(shè)計。本文首先在介紹了ARMLinux及Web的基本知識,詳細(xì)闡述了嵌入式開發(fā)所需的開發(fā)環(huán)境,并通過在嵌入式下安裝服務(wù)器boa、數(shù)據(jù)庫sqlite的提出,介紹了安裝過程中所要注意的細(xì)節(jié)問題,詳細(xì)闡述了如何移植程序到開發(fā)板。最后引入了cgi編程,并詳細(xì)闡述了應(yīng)用C語言編寫cgi程序,對數(shù)據(jù)庫的有關(guān)操作,如何實現(xiàn)頁面間的傳值及界面的設(shè)置。最后討論了本次設(shè)計的優(yōu)缺點。事實證明,嵌入式下的web開發(fā)非常有潛力,它提高了Web應(yīng)用開發(fā)技術(shù)的水準(zhǔn),將web應(yīng)用在嵌入式設(shè)備。嵌入式web開發(fā)有機(jī)地結(jié)合起來充分發(fā)揮了兩者的優(yōu)點,使得它們優(yōu)勢互補,形成一個統(tǒng)一的框架。這樣一來,設(shè)備的可擴(kuò)展性,可維護(hù)性,可操作性都有了很大的提高。

參考文獻(xiàn)楊路明C語言程序設(shè)計北京郵電大學(xué)出版社2006甘剛Linux/Unix網(wǎng)絡(luò)編程中國水利水電出版社2008趙炯Linux內(nèi)核完全剖析機(jī)械工業(yè)出版社2008DvidHansonC語言接口與實現(xiàn)機(jī)械工業(yè)出版社2004謝希仁計算機(jī)網(wǎng)絡(luò)電子工業(yè)出版社2008黃維通VIsualC++面向?qū)ο笈c可視化程序設(shè)計清華大學(xué)出版社2005孟靜操作系統(tǒng)教程高等教育出版社2006王珊數(shù)據(jù)庫系統(tǒng)概論高等教育出版社2007陳新高鳳梅嵌入式數(shù)據(jù)庫Sqlite在B/S監(jiān)控中的應(yīng)用中國工控網(wǎng)2008嵌入式數(shù)據(jù)庫SQLite在遠(yuǎn)程監(jiān)控系統(tǒng)中的應(yīng)用現(xiàn)代電子技術(shù)2007中國IT實驗室嵌入式開發(fā)基于ARM-Linux的SQLite嵌入式數(shù)據(jù)庫技術(shù)2009李敬兆8086/8088和ARM核匯編語言程序設(shè)計中國科學(xué)技術(shù)大學(xué)出版社2006黃友瑞凌六一嵌入式系統(tǒng)設(shè)計與開發(fā)國防工業(yè)出版社2009劉海濤孫天澤嵌入式系統(tǒng)技術(shù)與設(shè)計人民郵電出版社2009孫天澤袁文菊嵌入式設(shè)計及Linux驅(qū)動程序開發(fā)指南電子工業(yè)出版社2009基于ARM的嵌入式移動終端軟件的設(shè)計與實現(xiàn)論文網(wǎng)基于ARM9嵌入式網(wǎng)管系統(tǒng)的設(shè)計與實現(xiàn)2008嵌入式在線重慶郵電大學(xué)18、基于ARM-Linux與GPRS的GPS監(jiān)控終端的研究與實現(xiàn)2009楊永金廈門大學(xué)19、基于ARM-Linux和GPRS技術(shù)的家庭智能控制終端設(shè)計與實現(xiàn)王藝劉方林曉輝2009南京航空航天大學(xué)20、基于嵌入式Web服務(wù)器的設(shè)計與實現(xiàn)中國工控網(wǎng)嵌入式/ARM技術(shù)21、基于ARMlinux的嵌入式遠(yuǎn)程測控系統(tǒng)設(shè)計通信技術(shù)網(wǎng)22、嵌入式Linux環(huán)境下Web頁面技術(shù)的實現(xiàn)飛狐論文網(wǎng)23、PerformanceandpowerevaluationofC++object-orientedprogramminginembeddedprocessorsAlexanderChatzigeorgiouOctober2001

致謝經(jīng)過半年的忙碌和工作,本次畢業(yè)設(shè)計已經(jīng)接近尾聲,作為一個本科生的畢業(yè)設(shè)計,由于經(jīng)驗的匱乏,難免有許多考慮不周全的地方,如果沒有導(dǎo)師的督促指導(dǎo),以及一起去實驗室的同學(xué)們的支持,想要完成這篇論文是難以想象的。

在這里首先要感謝我的導(dǎo)師倪福川老師。倪福川老師平日里工作繁多,但在我做畢業(yè)設(shè)計的每個階段,都對我督促嚴(yán)謹(jǐn),并給予我悉心的指導(dǎo)。我的設(shè)計倪老師給了我多方面的想法。除了敬佩倪老師的專業(yè)水平外,他的治學(xué)嚴(yán)謹(jǐn)和科學(xué)研究的精神我也是很敬佩,并將積極影響我今后的學(xué)習(xí)和工作。

其次要感謝和我一起作畢業(yè)設(shè)計的張銳平同學(xué),他在做畢業(yè)設(shè)計的工作中,每天和我一起去實驗室,并在設(shè)計中提供了很多意見。如果沒有他和我一起工作,此次設(shè)計的完成也將變得非常困難。

然后還要感謝大學(xué)四年來所有的老師,為我們打下計算機(jī)專業(yè)知識的基礎(chǔ);同時還要感謝所有的同學(xué)們,正是因為有了你們的支持和鼓勵。此次畢業(yè)設(shè)計才會順利完成。

最后感謝我的母校—華中農(nóng)業(yè)大學(xué)四年來對我的大力栽培

附錄附錄1:查詢功能實現(xiàn)函數(shù)代碼select.c#include<stdio.h>#include<stdlib.h>#include<sqlite3.h>#include<string.h>intselectDb(char*sql,sqlite3*db){ intnrow=0; intncolumn=0; char*zErrMsg=0; char**azResult; inti,j; sqlite3_get_table(db,sql,&azResult,&nrow,&ncolumn,&zErrMsg); printf("<tr><td>Id</td><td>Name</td><td>Sex</td><td>edit</td><td>delete</td></tr>"); for(i=1;i<=nrow;i++) { printf("<tr>"); for(j=0;j<ncolumn;j++) { printf("<td>%s</td>",azResult[i*ncolumn+j]); } printf("<td><ahref='edit?id=%s&name=%s&sex=%s'>edit</a></td><td><ahref='delete?id=%s'>delete</a></td>",azResult[i*ncolumn],azResult[i*ncolumn+1],azResult[i*ncolumn+2],azResult[i*ncolumn]); printf("</tr>"); } return1;}intmain(){ sqlite3*db=NULL; char*zErrMsg=0; intrc; char*sql="select*fromstudent"; rc=sqlite3_open("myDB.db",&db);//打開myDB.db數(shù)據(jù)庫返回值rc if(rc) { fprintf(stderr,"Can'topensqlite:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } else printf("opensqlitesuccess\n");//顯示查詢的網(wǎng)頁的html printf("Content-type:text/html\n\n"); printf("<html>\n"); printf("<head>\n"); printf("<title>myDb</title>\n"); printf("</head>\n"); printf("<body>\n"); printf("<tablealign='center'>\n"); selectDb(sql,db); printf("</table>\n"); printf("<ahref=insert>AddNewDate</a>"); printf("</body>\n"); printf("</HTML>\n"); sqlite3_close(db); return0;}附錄2:插入功能實現(xiàn)主要代碼insert_cl.c#include<stdio.h>#include<stdlib.h>#include<sqlite3.h>#include<string.h>inthtoi(char*s){ char*digits="0123456789ABCDEF"; if(islower(s[0])) s[0]=toupper(s[0]); if(islower(s[1])) s[1]=toupper(s[1]); return16*(strchr(digits,s[0])-strchr(digits,'0'))+(strchr(digits,s[1])-strchr(digits,'0'));}intinsertDb(char*sql,sqlite3*db){ intrc; char*zErrMsg=0; rc=sqlite3_exec(db,sql,0,0,&zErrMsg); returnrc;}intmain(){ sqlite3*db=NULL; char*zErrMsg=0; intrc; charsql1[200]; inti,n,a,k,t1,t2,t3; charc; chars[3]; charabcc[256]; charid[50]; charname[50]; charsex[50]; n=0; sprintf(abcc,"%s",getenv("QUERY_STRING"));//環(huán)境變量傳值 n=strlen(abcc); a=1; k=0; t1=0; t2=0; t3=0; for(i=0;i<n;i++){ c=abcc[i]; switch(c){ case'&': k=0; a++; continue; break; case'+': c=''; break; case'%': s[0]=abcc[i+1]; s[1]=abcc[i+2]; s[2]=0; c=htoi(s); i=i+2; break; case'=': k=1; continue; break; }; if(k==1) { if(a==1) id[t1++]=c; if(a==2) name[t2++]=c; if(a==3) sex[t3++]=c; } } fflush(stdout); id[t1]=0; name[t2]=0; sex[t3]=0; memset(sql1,0,200); rc=sqlite3_open("myDB.db",&db); if(rc) { fprintf(stderr,"Can'topensqlite:%s\n",sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } printf("Content-type:text/html\n\n"); printf("<html>\n"); printf("<head>\n"); printf("<title>myDb</title>\n"); printf("</head>\n"); printf("<body>\n"); sprintf(sql1,"insertintostudentvalues('%s','%s','%s')",id,name,sex); if(insertDb(sql1,db)==SQLITE_OK) { printf("insertonedatasuccess.<ahref='select'>Back</a>\n"); } else { printf("insertonedatafailure.<ahref='select'>Back</a>\n"); } printf("</body>\n"); printf("</HTML>\n"); sqlite3_close(db); return0;}附錄3:更新功能實現(xiàn)主要代碼edit_cl.c#include<stdio.h>#include<stdlib.h>#include<sqlite3.h>#include<string.h>inthtoi(char*s){ char*digits="0123456789ABCDEF"; if(islower(s[0])) s[0]=toupper(s[0]); if(islower(s[1])) s[1]=toupper(s[1]); return16*(strchr(digits,s[0])-strchr(digits,'0'))+(strchr(digits,s[1])-strchr(digits,'0'));}intupdateDb(char*sql,sqlite3*db){ intrc; char*zErrMsg=0; rc=sqlite3_exec(db,sql,0,0,&zErrMsg); returnrc;}intmain(){ sqlite3*db=NULL; char*zErrMsg=0; intrc; charsql1[200]; inti,n,a,k,t1,t2,t3; charc; chars[3]; charabcc[256]; charid[50]; charname[50]; charsex[50]; n=0; sprintf(abcc,"%s",getenv("QUERY_STRING")); n=strlen(abcc); a=1; k=0; t1=0; t2=0; t3=0; for(i=0;i<n;i++){ c=abcc[i]; switch(c){ case'&': k=0; a++; continue; break; case'+': c=''; break; case'%': s[0]=abcc[i+1]; s[1]=abcc[i+2]; s[2]=0; c=htoi(s); i=i+2; break; case'=': k=1; continue; break; }; if(k==1) { if(a==1) name[t1++]=c; if(a==2) sex[t2++]=c; if(a==3) id[t3++]=c; } } fflush(stdout); name[t1]=0; sex[t2]=0

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論