我正在编写一个基本的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