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