2010-11-03 45 views
4

我有一個C程序,在Perl腳本中通過系統調用進行調用。我想知道:是否有一種方法可以將C程序本身自己託管在Apache中,以便可以使用Apache設置的相同規則(例如超時和內存)來管理它們?如何在Apache中託管C程序?

回答

4

你有什麼試過,什麼不行?

如果開頭:

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

...然後產生一些輸出,並且它在你的cgi-bin,那麼它應該工作。

+0

哦,並確保它是可執行的......但是,它並不複雜。 – Jonathan 2010-11-04 13:46:08

+0

謝謝,它需要的命令行參數呢?重寫該程序並不是一個真正的選擇,因爲代碼已經編譯,我沒有源代碼。 – recursive9 2010-11-04 15:16:52

+0

在這種情況下,您需要某種包裝。 – 2010-11-04 15:18:58

2

我認爲你正在尋找如何write an Apache module。這些受Apache設置的限制,例如CGI可能會做任何事情。但是,我認爲Apache實際上可以限制CGI的內存使用情況。

(不一定是壞事,但你想在Apache配置中限制的東西?)

+0

Apache無法限制CGI內存使用量。 CGI運行與Apache分離的新進程。 – dns 2013-05-11 16:35:59

+0

@dns,是的,但該過程將繼承其父項的ulimits。 – 2015-07-31 06:55:54

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")); 
    } 
} 
+0

嘗試使用FastCGI之前獲取樣本測試工作。一次一件事......但是,FastCGI絕對是一個好主意。 – Jonathan 2010-11-04 13:45:25

+0

一個正常的CGI程序可以變成一個FastCGI程序,只需很少的改動。提出問題的人有一個C程序包裝在perl腳本中,所以C程序應該已經非常接近成爲CGI程序。 – Neopallium 2010-11-04 13:57:56

+0

c程序已編譯完成,沒有可用的源代碼。 – recursive9 2010-11-04 15:17:20

2

如果你可以把你的程序到庫中,你可以使用Inline::C將它鉤直接進入你的Perl代碼。這會讓你用普通的perl函數調用來替換你的system()調用。您可能必須理清一些數據編組問題,但Inline :: C比XS更易於使用。

相關問題