GoAhead2.5原始碼分析之9-cgi處理控制代碼(cgi.c)

來源:互聯網
上載者:User
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任務是否存在

說明:

-----------------------------------------------------------------------------------------------------------------

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.