各行各業(yè)都該認(rèn)識(shí)OKR(各行各業(yè)的人都在做什么)">各行各業(yè)都該認(rèn)識(shí)OKR(各行各業(yè)的人都在做什么)
3352
2025-03-31
寫在最前面
華清遠(yuǎn)見教育集團(tuán)
15年專注高端IT培訓(xùn)
做良心教育,做專業(yè)教育,做受人尊敬的職業(yè)教育
創(chuàng)客學(xué)院官網(wǎng):http://www.makeru.com.cn/
華清遠(yuǎn)見創(chuàng)客學(xué)院嵌入式課程鏈接:http://www.makeru.com.cn/emb
華清遠(yuǎn)見創(chuàng)客學(xué)院物聯(lián)網(wǎng)課程鏈接:http://www.makeru.com.cn/iot
概述
CGI 是Web 服務(wù)器運(yùn)行時(shí)外部程序的規(guī)范,按CGI 編寫的程序可以擴(kuò)展服務(wù)器功能。CGI 應(yīng)用程序能與瀏覽器進(jìn)行交互,還可通過數(shù)據(jù)庫API 與數(shù)據(jù)庫服務(wù)器等外部數(shù)據(jù)源進(jìn)行通信,從數(shù)據(jù)庫服務(wù)器中獲取數(shù)據(jù)。格式化為HTML文檔后,發(fā)送給瀏覽器,也可以將從瀏覽器獲得的數(shù)據(jù)放到數(shù)據(jù)庫中。幾乎所有服務(wù)器都支持CGI,可用任何語言編寫CGI,包括流行的C、C ++、VB 和Delphi 等。CGI 分為標(biāo)準(zhǔn)CGI 和間接CGI兩種。標(biāo)準(zhǔn)CGI 使用命令行參數(shù)或環(huán)境變量表示服務(wù)器的詳細(xì)請(qǐng)求,服務(wù)器與瀏覽器通信采用標(biāo)準(zhǔn)輸入輸出方式。間接CGI 又稱緩沖CGI,在CGI 程序和CGI 接口之間插入一個(gè)緩沖程序,緩沖程序與CGI 接口間用標(biāo)準(zhǔn)輸入輸出進(jìn)行通信。
目的:本文從學(xué)習(xí)的角度來認(rèn)識(shí)CGI。重點(diǎn)是對(duì)整體框架的理解,和對(duì)CGIC在嵌入式環(huán)境的移植。
框圖
CGI程序的工作一般就是接收表單數(shù)據(jù),進(jìn)行數(shù)據(jù)處理,最后根據(jù)處理結(jié)果生成新的頁面返回給瀏覽器。
CGIC
CGIC是一個(gè)功能比較強(qiáng)大的支持CGI開發(fā)的標(biāo)準(zhǔn)C庫,并支持Linux, Unix 和Windows等多操作系統(tǒng)
源碼分析
用戶操作流程分析
用戶通過客戶端應(yīng)用(瀏覽器)向web服務(wù)發(fā)送一個(gè)get請(qǐng)求,web服務(wù)器返回一個(gè)默認(rèn)的靜態(tài)html頁面;用戶想在這個(gè)基礎(chǔ)上進(jìn)一步操作,比如用戶登錄,需要填寫 '用戶名-密碼' 吧,這樣提交的信息就以form表單的形式從web服務(wù)器,再通過CGI接口向服務(wù)器上的應(yīng)用發(fā)送。CGI就是這么一個(gè)中間機(jī)制,這里簡單理解就是講前端產(chǎn)生的html語言轉(zhuǎn)換成應(yīng)用層的c語言,實(shí)現(xiàn)交互。
CGIC的移植過程
源碼移植
1.下載源碼
http://www.boutell.com/cgic/
2.解壓
root@linux:cgi_test# tar -xvf cgic205.tar.gz
3.修改交叉編譯環(huán)境
root@linux:cgic205# cd ./cgic205
root@linux:cgic205# vim Makefile
CC=arm-none-linux-gnueabi-gcc
AR=arm-none-linux-gnueabi-ar
RANLIB=arm-none-linux-gnueabi-ranlib
#gcc cgictest.o -o cgictest.cgi ${LIBS}
$(CC) $(CFLAGS) cgictest.o -o cgictest.cgi ${LIBS}
#gcc capture.o -o capture ${LIBS}
$(CC) $(CFLAGS) capture.o -o capture ${LIBS}
4.編譯cgi源碼
root@linux:cgic205# make
5.將capture和cgictest.cgi拷貝到nfs共享根目錄下的boa/cgi-bin/目錄中
root@linux:cgic205# ls
capture ? ?cgic.c ? ? cgic.o ? ? ? ?cgictest.o ? Makefile
capture.c ?cgic.h ? ? cgictest.c ? ?libcgic.a ? ?readme.txt
capture.o ?cgic.html ?cgictest.cgi ?license.txt ?support.txt
root@linux:cgic205# cp capture cgictest.cgi /nfs/rootfs/boa/cgi-bin/
root@linux:cgic205#
6.測試效果
<1>開發(fā)板上
[root@farsight boa]# pwd
/boa
[root@farsight boa]# ./boa
<2>瀏覽器輸入url ?http://192.168.9.9/cgi-bin/cgictest.cgi
進(jìn)一步項(xiàng)目移植
1.添加新的文件到cgi源碼目錄
root@linux:cgi# cp -rf cgi_src-05-30-17-00 ~/cgi_test/cgic205/
root@linux:cgi# cd /root/cgi_test/cgic205/cgi_src-05-30-17-00
root@linux:cgi_src-05-30-17-00# pwd
/root/cgi_test/cgic205/cgi_src-05-30-17-00
root@linux:cgi_src-05-30-17-00# cp m0_* ../
root@linux:cgi_src-05-30-17-00# cp sem.h env1.c login.c setEnv.c data_global.h ../
2.修改Makefile編譯規(guī)則,把剛才那些文件添加到Makefile編譯項(xiàng)
root@linux:cgi_src-05-30-17-00# cd ..
root@linux:cgic205# vim Makefile
CC=arm-none-linux-gnueabi-gcc
AFLAGS=-Wall -g
LDFLAGS= -L ./lib
OBJS= capture.cgi m0_beep.cgi m0_fan.cgi m0_led.cgi \
m0_seg.cgi env1.cgi setEnv.cgi
run:$(OBJS)
$(OBJS):%.cgi:%.c
$(CC) $(AFLAGS) $< cgic.c -o $@ $(LDFLAGS)
install:
$(CC) $(AFLAGS) login.c -o login.cgi
mv *.cgi ./out/
cp ?./out/*.cgi ?/nfs/rootfs/boa/cgi-bin
.PHONY:clean
clean:
rm ./out/*.cgi
3.編譯并將目標(biāo)文件移動(dòng)到nfs根目錄下
root@linux:cgic205# make
root@linux:cgic205# make install
4.在/nfs/rootfs/boa/www下添加需要的html文件
root@linux:boa# ls www/
choose.html ?env2.html ?index.html ?m0_2.html ? main2.html ?video1.html
env1.html ? ?images ? ? m0_1.html ? main1.html ?pice ? ? ? ?video2.html
root@linux:boa# cp -rf www/* /nfs/rootfs/boa/www/
5.查看效果
用戶通過瀏覽器訪問開發(fā)板IP,web服務(wù)器返回一個(gè)默認(rèn)頁面
用戶通過輸入欄,填寫用戶名密碼(提交表單),web服務(wù)器通過cgi接口返回又一個(gè)頁面
擴(kuò)展學(xué)習(xí)-cgic官網(wǎng)學(xué)習(xí)教程:https://boutell.com/cgic/
web前端
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。