我正在編寫一個基本的http服務器C.處理一個簡單的靜態.html文件很簡單,但我不知道如何處理動態.pl .cgi文件擴展名。在純粹的http服務器中處理CGI請求
我知道我將不得不使用exec(),但我的問題如何?
我正在編寫一個基本的http服務器C.處理一個簡單的靜態.html文件很簡單,但我不知道如何處理動態.pl .cgi文件擴展名。在純粹的http服務器中處理CGI請求
我知道我將不得不使用exec(),但我的問題如何?
是的,你應該調用exec。特別是,你可能想要運行一個shell,它將找出哪種腳本(例如perl,shell等)或二進制cgi程序,並正確執行它。
通常的順序是:用pipe創建一些管道,fork生成一個新進程,dup2將stdin和stdout連接到管道,exec(運行新程序)。
您可能會調用exec的execle變體。最後一個參數是您的cgi程序的一組環境變量。根據傳入請求在cgi規範中設置名稱值對。這些將具有名稱,如REQUEST_METHOD
和QUERY_STRING
。
接下來,將請求內容寫入cgi的標準輸入。例如,這將是POST的情況下的請求參數字符串。最後,讀取stdout並將其回顯給瀏覽器。
看看CGI Spec。特別是第4節「調用腳本」和第6節「CGI腳本的數據輸入」。您將需要爲要讀取的cgi腳本設置環境變量(QUERY_STRING,SCRIPT_NAME等)。這失控讓你走。
HTTP服務器的作用是實現HTTP協議(基本上通信協議坐在TCP/IP的頂部)
支持特等,的CGI等是Application Server的作用。有很多很好的例子。例如,在Ruby on Rails中,您可以使用Web服務器(Apache/nginx)並在這些實例後面運行Ruby解釋器(實際上它將在內部嵌入Ruby代碼處理HTML)
您確實需要弄清楚您的目標是什麼。
爲什麼?爲什麼?哦爲什麼? – innaM 2009-10-20 18:22:22
@Manni:作業... – Kev 2009-10-20 18:24:36
當我在學校時,它是'Eratosthenes的篩分'或'烹飪recepies的數據庫'..現在'http'服務器呢? – lexu 2009-10-20 18:28:54