cgi.c(cgi)
int websCgiHandler(webs_t wp, char_t *urlPrefix, char_t *webDir, int arg, char_t *url, char_t *path, char_t* query)
功能:處理cgi請求。
說明:
1. 抽出頁面上form中調用的cgi程式的名字,構建完整的路徑/ata0/webs/www/*
2. 進入到cgi程式所在的目錄,即/ata0/webs/www
3. 分配記憶體,建立cgi程式的參數,主要是從也空格分割的qurey中提取出來
4. 從cgi的環境變數中,構建名、值對。
5. 確定標準輸入、輸出。標準輸出是個臨時檔案。
6. 調用websLaunchCgiProc,建立cgi處理常式。
-----------------------------------------------------------------------------------------------------------------
void websCgiGatherOutput (cgiRec *cgip)
功能:將臨時檔案中的內容輸出到瀏覽器上。
說明:也就是將cgi程式prinf出的記憶體到臨時檔案,然後讀取臨時檔案中的內容到瀏覽器上。
-----------------------------------------------------------------------------------------------------------------
void websCgiCleanup()
功能:調用websCgiGatherOutput處理輸出,清空cgi所佔用的資源
說明:
-----------------------------------------------------------------------------------------------------------------
char_t *websGetCgiCommName()
功能:臨時檔案名稱
說明:
-----------------------------------------------------------------------------------------------------------------
int websLaunchCgiProc(char_t *cgiPath, char_t **argp, char_t **envp, char_t *stdIn, char_t *stdOut)
功能:cgi處理常式。
說明:
1. 根據cgiPath,卸載已有的module
2. 尋找_www_cgientry的對應值,找到就將值賦給entryAddr,產生任務vxWebsCgiEntry
3. 如果找不到,就載入cgiPath,產生任務vxWebsCgiEntry
-----------------------------------------------------------------------------------------------------------------
static void vxWebsCgiEntry(void *entryAddr(int argc, char_t **argv), char_t **argp, char_t **envp, char_t *stdIn, char_t *stdOut)
功能:cgi程式的外殼,都是通過調用它,來調用cgi程式
說明:設定該任務的標準輸入、輸出為stdIn、stdOut,建立環境變數,用envp對環境變數賦值,調用cgi處理函數entryAddr。
-----------------------------------------------------------------------------------------------------------------
int websCheckCgiProc(int handle)
功能:檢查cgi任務是否存在
說明:
-----------------------------------------------------------------------------------------------------------------