C で基本的な http サーバーを作成しています。単純な静的 .html ファイルの処理は簡単ですが、動的な .pl .cgi ファイル拡張子の処理方法がわかりません。
exec() を使用する必要があることはわかっていますが、私の質問はどうですか?
C で基本的な http サーバーを作成しています。単純な静的 .html ファイルの処理は簡単ですが、動的な .pl .cgi ファイル拡張子の処理方法がわかりません。
exec() を使用する必要があることはわかっていますが、私の質問はどうですか?
はい、execを呼び出す必要があります。特に、シェルを実行して、cgiプログラムがどのような種類のスクリプト(perl、シェルなど)またはバイナリであるかを把握し、適切に実行することをお勧めします。
通常のシーケンスは次のとおりです。パイプを使用してパイプを作成し、フォークで新しいプロセスを生成し、dup2でstdinとstdoutをパイプに接続し、exec(新しいプログラムを実行する)を実行します。
おそらくexecのexecleバリアントを呼び出すことになります。最後のパラメーターは、cgiプログラムの環境変数のセットです。着信要求に基づいて、cgi仕様で名前と値のペアを設定します。これらの名前はとのようREQUEST_METHOD
になりQUERY_STRING
ます。
次に、リクエストの内容をcgiの標準入力に書き込みます。これは、たとえばPOSTの場合のリクエストパラメータ文字列になります。最後に、stdoutを読み取り、ブラウザにエコーバックします。
CGI Specを見てください。具体的には、セクション 4「スクリプトの呼び出し」とセクション 6「CGI スクリプトへのデータ入力」です。cgi スクリプトが読み取る環境変数を設定する必要があります (QUERY_STRING、SCRIPT_NAME など)。これでうまくいきます。
HTTP サーバーの役割は、HTTP プロトコル (基本的には TCP/IP の上にある通信プロトコル) を実装することです。
.pl、.cgi などのサポートは、アプリケーション サーバーの役割です。多くの良い例があります。たとえば、Ruby on Rails では、Web サーバー (Apache/nginx) を使用し、それらの背後で Ruby インタープリターを実行できます (実際には、内部に Ruby コードが埋め込まれた HTML を処理します)。
あなたは本当にあなたの目標が何であるかを理解する必要があります。