如何在Apache中托管C程序?

时间:2010-11-03 14:15:52

标签: c++ c apache cgi

我有一个在Perl脚本中通过系统调用调用的C程序。我想知道:我是否有办法在Apache内部实际托管C程序,以便可以使用Apache设置的相同规则(例如超时和内存)来管理它?

4 个答案:

答案 0 :(得分:4)

你尝试了什么,什么不起作用?

如果它以:

开头
printf("Content-type: text/html\r\n\r\n"); /* Or whatever the content type is */

...然后产生一些输出,并且它在你的cgi-bin中,然后它应该工作。

答案 1 :(得分:2)

我认为你正在寻找write an Apache module的方法。这些受Apache设置的限制,而例如CGI可能会做任何事情。但是,我认为Apache实际上可以限制CGI内存使用,例如。

(不一定是坏事,但你想限制Apache配置中的内容吗?)

答案 2 :(得分:2)

我建议在C程序和Apache之间使用FastCGI协议。 fastcgi开发工具包有一个简单易用的C API。

以下是文档中的FastCGI C程序示例:

#include "fcgi_stdio.h" /* fcgi library; put it first*/

#include <stdlib.h>

int count;

void initialize(void)
{
  count=0;
}

void main(void)
{
/* Initialization. */  
  initialize();

/* Response loop. */
  while (FCGI_Accept() >= 0)   {
    printf("Content-type: text/html\r\n"
           "\r\n"
           "<title>FastCGI Hello! (C, fcgi_stdio library)</title>"
           "<h1>FastCGI Hello! (C, fcgi_stdio library)</h1>"
           "Request number %d running on host <i>%s</i>\n",
            ++count, getenv("SERVER_HOSTNAME"));
  }
}

答案 3 :(得分:2)

如果您可以将程序转换为库,则可以使用Inline::C将其直接挂接到perl代码中。这样您就可以使用普通的perl函数调用替换system()调用。您可能需要解决一些数据编组问题,但Inline :: C比XS更容易使用。