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