2

我正在用 C 编写一个基本的 http 服务器。处理一个简单的静态 .html 文件很容易,但我不知道如何处理动态 .pl .cgi 文件扩展名。

我知道我将不得不使用 exec() 但我的问题如何?

4

3 回答 3

2

看看CGI 规范。特别是第 4 节“调用脚本”和第 6 节“CGI 脚本的数据输入”。您需要设置环境变量以供 cgi 脚本读取(QUERY_STRING、SCRIPT_NAME 等)。这不能让你走。

于 2009-10-20T18:27:34.777 回答
2

HTTP 服务器的作用是实现 HTTP 协议(​​本质上是位于 TCP/IP 之上的通信协议)

支持 .pl、.cgi 等是 Application Server 的角色。有很多很好的例子。例如,在 Ruby on Rails 中,您可以使用 Web 服务器(Apache/nginx)并在这些服务器后面运行 ruby​​ 解释器(实际上它会处理带有嵌入 Ruby 代码的 HTML)

你真的需要弄清楚你的目标是什么。

于 2009-10-20T18:27:57.267 回答
2

是的,你应该打电话给 exec。特别是,您可能想要运行一个 shell,它会确定 cgi 程序是什么类型的脚本(例如 perl、shell 等)或二进制文件,并正确执行它。

通常的顺序是:使用管道创建一些管道,fork 生成一个新进程,dup2 将 stdin 和 stdout 连接到管道,然后 exec(运行新程序)。

您可能会调用 exec 的 execle 变体。最后一个参数是你的 cgi 程序的一组环境变量。根据传入的请求在 cgi 规范中设置名称值对。这些将具有 和 之类的REQUEST_METHOD名称QUERY_STRING

接下来,将请求内容写入 cgi 的标准输入。例如,在 POST 的情况下,这将是请求参数字符串。最后,读取标准输出并将其回显到浏览器。

于 2009-10-20T18:41:54.687 回答