学校のプロジェクト用に http サーバーを作成していて、CGI スクリプトを実行しようとしています。次のコードは cgi プログラムを正常に実行し、プログラムの出力はブラウザーに送信されますが、POST されたデータの送信方法に問題があります。これが私が持っているものです:
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 スクリプトに投稿すると、まったく応答が送信されなかったり、実行が終了したりしません。もっとstdinを待っていると思います。私のパイピングと dup2ing に明らかな問題がなければ、問題を説明するコンパイル可能なテスト コードを投稿します。
ありがとうございました!