c语言编制编程语言,C语言CGI编程入门(一)
CGI是指web服務(wù)器調(diào)用編程語言編寫的流程的一個(gè)接口。比如我們可以編寫一個(gè)用戶注冊(cè)的界面,用戶將其輸入的郵件、用戶名、密鑰輸入并點(diǎn)擊注冊(cè),此時(shí)瀏覽器就將用戶輸入的內(nèi)容發(fā)送給了我們后臺(tái)的CGI程序,我們的CGI程序接受到其他資料,可以對(duì)其進(jìn)行處理。比如送入、分析輸入的資料是否非法等。
主流的CGI程序用Perl編寫,Perl是一款超強(qiáng)的插件語言,但是我這兒不太懂,我也不去比較某兩個(gè)語言間的好壞。我說一下用C和C++如何編寫CGI程序,告訴你們用C語言也能編寫web應(yīng)用程序,用C語言也能寫一個(gè)網(wǎng)站。
1.準(zhǔn)備工作
首先要先安裝一款web服務(wù)器。我就用windows功能下的Apache,其實(shí)Linux下大同小異,應(yīng)該需要增設(shè)的東西多一些。
你們可以在apache網(wǎng)站下載最新版的Apache for Windows,月亮也是下載:。安裝后打開安裝目錄,大致就是這樣一些文檔:
看到那種“cgi-bin”了嗎,這是默認(rèn)的cgi程序目錄。當(dāng)然,我們也可以手動(dòng)設(shè)置其位置:用記事本打開conf/httpd.conf,這是Apache的頂配文檔。找到類似上面這一行
ScriptAlias /cgi-bin/ "d:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/"
"/cgi-bin/"指出web地址,譬如默認(rèn)是,即訪問cgi的根目錄。"d:/Program Files (x86)/Apache Software Foundation/Apache2.2/cgi-bin/"指出對(duì)應(yīng)的絕對(duì)路徑。這也是不難理解,我們?yōu)g覽器訪問就是代表訪問了服務(wù)器上的相應(yīng)的絕對(duì)路徑。所以修改這個(gè)絕對(duì)路徑,就可以指定我們的CGI程序存放的根目錄。
我這兒就不改了,一會(huì)我們寫好的CGI程序直接放到這個(gè)cgi-bin文件夾下,再通過訪問即可。
2.直到寫程序
用VS2010新建一個(gè)控制臺(tái)應(yīng)用程序工程,我的叫做cgi_test。在main函數(shù)里寫
printf("Content-type:text/html\n\n");
printf("hello world!!");
其實(shí)也可以用C++的cout來替代printf輸出。先別急著編譯,我們先在工期上點(diǎn)光標(biāo),選擇特性:
在頂配設(shè)置-常規(guī)中,更改輸出目錄為cgi-bin下。我就改成cgi-bin\test\,這種我們生成的可執(zhí)行文檔都會(huì)被放置這兒。目標(biāo)文件的擴(kuò)展名我也順便從exe改成cgi,所以不改,迅雷等下載可能會(huì)讓你下載而不是讓瀏覽器解析它。
再就可以編譯了。F7編譯后,我們回到cgi-bin/test/中,就可以看見我們編譯生成好的"cgi_test.cgi"文件。
打開瀏覽器,輸入,就可以看見hello world了:
這就是我們的第一個(gè)cgi程序。
3.如何寫一個(gè)CGI程序
剛才寫程序的工作是我來完成的c語言入門,但是那兩個(gè)語句很簡(jiǎn)單,但有的同學(xué)會(huì)問為什么要怎么寫。
我簡(jiǎn)單解釋一下,第一個(gè)printf輸出的"Content-type:text/html\n\n"是一個(gè)文件的標(biāo)識(shí),告訴瀏覽器以html的句子來解析此文檔,而不是去下載它(切記末尾需要兩個(gè)換行,即一個(gè)空行,這是標(biāo)準(zhǔn))。只要我們需要輸出內(nèi)容到瀏覽器,都得加這一句話在最前面,忘記就好。
中間的printf就是輸出到瀏覽器上的資料,提醒需要用html的句子才能正常顯示在瀏覽器上。比如換行,需要用
,而不是\n了。不懂的去學(xué)習(xí)關(guān)于html的常識(shí)(因?yàn)椴粚W(xué)習(xí)html就別想做一個(gè)網(wǎng)站或web程序)。
如果,只要借助printf,就可以將任何html源碼輸出在瀏覽器里。而且,因?yàn)槭怯肅/C++寫的流程,但是C/C++下的所有函數(shù),都可以用在CGI程序里。(也包含windowsAPI)
比如,用戶提交好了注冊(cè)列表,將資料傳遞給我的CGI程序,我就可以讀取ODBC的變量c語言入門,打通,將資料寫入。也可以通過if判斷句,來檢查用戶能否輸入了合法資料。
不過有學(xué)生又要問了,用戶提交的資料如何就傳給我們的CGI程序了呢?程序又是什么接受這種數(shù)據(jù)?
4.接受GET或POST來的資料
因?yàn)椴恢繥ET和POST的含義,我建議你還是去看一下PHP。我這兒只簡(jiǎn)單地提一下,我們新建一個(gè)html頁面,在其中添加一個(gè)表單,其中有一個(gè)文本框和一個(gè)按鈕,大致代碼如下:
輸入內(nèi)容:
你們可以看見,form有個(gè)特性method,認(rèn)為你用多少方法報(bào)送(post或get),action屬性指出出具的地址。get方法報(bào)送,含義就是把提交的內(nèi)容放到地址前面,用?隔開。post提交就是把數(shù)據(jù)放到數(shù)據(jù)包里發(fā)送給目標(biāo)地址。我們?cè)谖谋究騼?nèi)填入信息,點(diǎn)擊頁面提交,我們填入的資料都會(huì)以對(duì)應(yīng)方法發(fā)送到目標(biāo)地址。
C程序接受POST過來的資料比較簡(jiǎn)單。因?yàn)閜ost來的資料都在輸入流里,直接scanf或cin>>就能調(diào)用了。
GET來的資料在地址欄里,我們需要用到一個(gè)C庫中的變量:getenv,它的效果是獲取環(huán)境變量,其中包含獲取GET來的資料。(獲取?后的一切內(nèi)容:getenv("QUERY_STRING"))
關(guān)于這個(gè)變量的一切用法我放到附件里,下載可查。
5.做個(gè)示范
int _tmain(int argc, _TCHAR* argv[])
{
printf("Content-type:text/html\n\n");
printf("%s",getenv("QUERY_STRING")); //打印get獲取的信息
char szPost[256];
gets(szPost);
if(strcmp(szPost,))
printf("%s",szPost); //打印post獲取的信息
return 0;
}
用我們剛才的html代碼來填寫:
填入內(nèi)容:
post方法獲取的資料,提醒地址欄:
get方法獲取的資料,提醒地址欄:
至于get方法獲取的資料打印出來前面為什么有亂碼,因?yàn)槲翼槺惆褯]有信息的szPost也打印了。實(shí)際使用的時(shí)候也是先分析szPost中能否有資料再打印。
今天寫的夠多了。大致C/C++處理CGI就是這樣子,你可以發(fā)揮自己的想像,寫成一些具備使用價(jià)值的流程。我們下次給你們講一個(gè)庫,通過這個(gè)庫,可以很輕松的使用cgi編寫web應(yīng)用程序。
本文來自電腦雜談,轉(zhuǎn)載請(qǐng)注明本文網(wǎng)址:
http://www.pc-fly.com/a/jisuanjixue/article-118963-1.html
總結(jié)
以上是生活随笔為你收集整理的c语言编制编程语言,C语言CGI编程入门(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 酒店管理系统c语言带注释,酒店管理系统-
- 下一篇: c语言 实现sizeof功能,C语言简单