您的位置:首页 > 编程语言

GoAhead2.5源代码分析之9-cgi处理句柄(cgi.c)

2011-12-22 00:30 316 查看

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任务是否存在

说明:

-----------------------------------------------------------------------------------------------------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: