2
我正在爲我的學校項目編寫一個http服務器,並試圖執行一個CGI腳本。下面的代碼成功地執行了cgi程序,程序的輸出被髮送到瀏覽器,但是我發送POST數據的方式有些問題。下面是我得到了什麼:如何執行並寫入到stdin和管道stdout到套接字?
int p[2];
pipe(p);
int pid = fork();
if (pid == 0) {
close(p[1]);
dup2(p[0], STDIN_FILENO);
dup2(socket, STDOUT_FILENO);
execve(path.c_str(), {}, (char**) &env[0]);
} else {
close(p[0]);
string body = req->getBody();
write(p[1], body.c_str(), body.size());
close(socket);
}
如果我理解正確的CGI我只需要設置一個HTTP_CONTENT_LENGTH環境變量(我做的),並請求主體發送到標準輸入。我是否使用管道,dup2,並寫出正確的方法來做到這一點?
發佈到我的測試PHP腳本時,$ _POST數組爲空。發佈到我的測試Perl腳本時,它根本不會發送任何響應或完成運行;我認爲它正在等待更多標準輸入。如果我的管道和重複模塊沒有明顯的錯誤,我會發布一些可以編譯的測試代碼來說明問題。
謝謝!