2009-10-20 113 views
2

我正在編寫一個基本的http服務器C.處理一個簡單的靜態.html文件很簡單,但我不知道如何處理動態.pl .cgi文件擴展名。在純粹的http服務器中處理CGI請求

我知道我將不得不使用exec(),但我的問題如何?

+0

爲什麼?爲什麼?哦爲什麼? – innaM 2009-10-20 18:22:22

+0

@Manni:作業... – Kev 2009-10-20 18:24:36

+2

當我在學校時,它是'Eratosthenes的篩分'或'烹飪recepies的數據庫'..現在'http'服務器呢? – lexu 2009-10-20 18:28:54

回答

2

是的,你應該調用exec。特別是,你可能想要運行一個shell,它將找出哪種腳本(例如perl,shell等)或二進制cgi程序,並正確執行它。

通常的順序是:用pipe創建一些管道,fork生成一個新進程,dup2將stdin和stdout連接到管道,exec(運行新程序)。

您可能會調用exec的execle變體。最後一個參數是您的cgi程序的一組環境變量。根據傳入請求在cgi規範中設置名稱值對。這些將具有名稱,如REQUEST_METHODQUERY_STRING

接下來,將請求內容寫入cgi的標準輸入。例如,這將是POST的情況下的請求參數字符串。最後,讀取stdout並將其回顯給瀏覽器。

2

看看CGI Spec。特別是第4節「調用腳本」和第6節「CGI腳本的數據輸入」。您將需要爲要讀取的cgi腳本設置環境變量(QUERY_STRING,SCRIPT_NAME等)。這失控讓你走。

2

HTTP服務器的作用是實現HTTP協議(基本上通信協議坐在TCP/IP的頂部)

支持特等,的CGI等是Application Server的作用。有很多很好的例子。例如,在Ruby on Rails中,您可以使用Web服務器(Apache/nginx)並在這些實例後面運行Ruby解釋器(實際上它將在內部嵌入Ruby代碼處理HTML)

您確實需要弄清楚您的目標是什麼。

+0

-1您的定義Apache是​​一個'應用服務器'。 IMO支持意味着「啓用」在這裏,而不是「在http服務器上執行」。 – lexu 2009-10-20 20:42:02

+1

Apache不是應用程序服務器。它是一個Web服務器。執行pl cgi等需要一些執行環境。 – Zepplock 2009-10-20 22:04:38