2009-10-20 114 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