簡體   English   中英

如何執行並寫入stdin並將stdout通過管道傳遞給套接字?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM