[英]How can I exec and write to stdin and pipe stdout to a socket?
我正在為我的學校項目編寫一個http服務器,並且試圖執行CGI腳本。 以下代碼成功執行了cgi程序,該程序的輸出發送到瀏覽器,但是我發送POSTED數據的方式出了點問題。 這是我得到的:
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環境變量(我正在這樣做)並將請求正文發送到stdin。 我在使用管道dup2並編寫正確的方法嗎?
發布到我的測試PHP腳本時,$ _POST數組為空。 當發布到我的測試perl腳本中時,它根本不會發送任何響應或完成運行。 我認為它正在等待更多的標准輸入。 如果我的管道和dup2ing沒有任何明顯的問題,我將發布一些可編譯的測試代碼來說明問題。
謝謝!
管道和重復都可以; 我的問題是我的CGI環境變量。 獲勝的環境變量為CONTENT_LENGTH,不以HTTP_為前綴。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.