我有一個C程序,在Perl腳本中通過系統調用進行調用。我想知道:是否有一種方法可以將C程序本身自己託管在Apache中,以便可以使用Apache設置的相同規則(例如超時和內存)來管理它們?如何在Apache中託管C程序?
回答
你有什麼試過,什麼不行?
如果開頭:
printf("Content-type: text/html\r\n\r\n"); /* Or whatever the content type is */
...然後產生一些輸出,並且它在你的cgi-bin,那麼它應該工作。
我認爲你正在尋找如何write an Apache module。這些受Apache設置的限制,例如CGI可能會做任何事情。但是,我認爲Apache實際上可以限制CGI的內存使用情況。
(不一定是壞事,但你想在Apache配置中限制的東西?)
Apache無法限制CGI內存使用量。 CGI運行與Apache分離的新進程。 – dns 2013-05-11 16:35:59
@dns,是的,但該過程將繼承其父項的ulimits。 – 2015-07-31 06:55:54
我會建議使用你的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"));
}
}
嘗試使用FastCGI之前獲取樣本測試工作。一次一件事......但是,FastCGI絕對是一個好主意。 – Jonathan 2010-11-04 13:45:25
一個正常的CGI程序可以變成一個FastCGI程序,只需很少的改動。提出問題的人有一個C程序包裝在perl腳本中,所以C程序應該已經非常接近成爲CGI程序。 – Neopallium 2010-11-04 13:57:56
c程序已編譯完成,沒有可用的源代碼。 – recursive9 2010-11-04 15:17:20
如果你可以把你的程序到庫中,你可以使用Inline::C將它鉤直接進入你的Perl代碼。這會讓你用普通的perl函數調用來替換你的system()
調用。您可能必須理清一些數據編組問題,但Inline :: C比XS更易於使用。
- 1. 在C#程序中託管Eclipse程序
- 2. 在c#應用程序中託管PDF
- 3. 如何在非託管C++應用程序中託管許可的.Net控件?
- 4. 如何在godaddy vps託管中託管角應用程序?
- 5. Spring應用程序如何在Apache服務器上託管?
- 6. 如何在本機C++ win32應用程序中託管JVM?
- 7. 如何在C++/CLI中將C++短*傳遞給託管C#程序集
- 8. 如何捕捉託管C++中的非託管C++異常
- 9. 在混合C++ .NET應用程序中強調託管還是非託管?
- 10. 子域託管在Apache上
- 11. 在Apache的託管或IIS
- 12. 清理在C#應用程序退出非託管C++線程
- 13. 託管C++程序集屬性
- 14. 試圖在Apache Mono上託管.net Web應用程序
- 15. 在Windows上使用Apache託管rails應用程序
- 16. 如何在Linux/Apache Web託管上運行win32控制檯應用程序?
- 17. 如何從非託管應用程序
- 18. 如何託管LightSwitch應用程序?
- 19. 如何託管Java應用程序?
- 20. 如何從託管C++ exe調用非託管C++ exe
- 21. 簽署引用非託管程序集的託管程序集
- 22. 在IIS中託管WCF應用程序
- 23. 在tomcat中託管grails應用程序
- 24. 在glassfish中託管應用程序
- 25. Gdiplus在C++託管或非託管?
- 26. 如何在可能沒有託管配置提供程序的應用程序中使用託管配置?
- 27. 如何在混合應用程序中執行異常處理? (託管應用程序使用非託管DLL)
- 28. 從託管C#應用程序中調用非託管代碼的缺點
- 29. 如何從非託管應用程序中延遲加載託管的DLL?
- 30. 如何將非託管dll和託管程序集合到一個文件中?
哦,並確保它是可執行的......但是,它並不複雜。 – Jonathan 2010-11-04 13:46:08
謝謝,它需要的命令行參數呢?重寫該程序並不是一個真正的選擇,因爲代碼已經編譯,我沒有源代碼。 – recursive9 2010-11-04 15:16:52
在這種情況下,您需要某種包裝。 – 2010-11-04 15:18:58