PerlへCGIするには – プログラミング – Home

通知
すべてクリア

[解決済] PerlへCGIするには


jaco
 jaco
(@jaco)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

はじめまして。jacoと申します。
C言語にはあまり関係ないかもしれませんが
どのような所で質問したらいいか分からない
ので失礼させていただきます。
VisualC 6.0、MFCの環境で、Winsockを使用
した簡単なHTTPサーバーを製作中なのですが、
Perlを実行するCGIの機能を実装しようと
思っているのですがやり方が分かりません。
PerlCGIは、標準入力から環境変数などを読み込み、
標準出力へ書き出すと思うのですが、
VCから標準入出力へのアクセス方法、またはPerl
とのやり取りの方法がまったく分からないのです。
どなたか、ご教授お願いいたします。


引用未解決
トピックタグ
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

CreateProcessでPerlプロセスを起動する際に、
標準入出力を指定できます。
これに、パイプのハンドルを指定することにより、
作成したプロセスの入出力にアクセスできます。

CreateProcess, CreatePipeあたりがキーワードです。


返信引用
jaco
 jaco
(@jaco)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

ご回答ありがとうございます。
さっそく以下のようなプログラムを作ってみたのですが、うまく動きません。
//-----------------------------------------
HANDLE PerlStdOutRead;
HANDLE PerlStdOutWrite;

si.dwFlags = STARTF_USESTDHANDLES;
si.hStdInput = PerlStdOutRead;
si.hStdOutput = PerlStdOutWrite;
si.hStdError = GetStdHandle(STD_ERROR_HANDLE);

CreatePipe(&PerlStdOutRead, &PerlStdOutWrite, &sa, 0);
CreateProcess(NULL, PerlPath, NULL, NULL, TRUE, 0, NULL, NULL, &si, &p);

while(ReadFile(PerlStdOutRead, buffer, 500, &nread, NULL)){
AfxMessageBox(buffer);
}
//----------------------------------------

戻り値を見る限り、
CreatePipe、CreateProcessは成功しているようなのですが。
ReadFileでフリーズしてしまいます。
きっとパイプの使い方が間違っているのだと思うのですが、
情けない事に自分では間違いを直せません。
よろしければ今一度ご教授願えないものでしょうか。


返信引用
dairygoods
 dairygoods
(@dairygoods)
ゲスト
結合: 23年前
投稿: 1421
 

(1)
> si.hStdOutput = PerlStdOutWrite;
> CreatePipe(&PerlStdOutRead, &PerlStdOutWrite, &sa, 0);

si.hStdOutputに未初期化の値を設定した後に、
PerlStdOutWriteにパイプハンドルを割り当てています。
つまり、si.hStdOutputには無効な値が入ったままです。

(2)
> si.hStdInput = PerlStdOutRead;
> si.hStdOutput = PerlStdOutWrite;
パイプの2つのハンドルはデータの出口と入口です。
これでは、相手の出力端子と入力端子をつないだ状態です。

双方向通信するには、相手の出力と自分の入力、および
相手の入力と自分の出力をつなぐ2本のパイプが必要です。

(3)
相手に渡したハンドルは、
こちらでは使わないのですぐに閉じる必要があります。


返信引用
jaco
 jaco
(@jaco)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

どうもありがとうございました!
ようやく目的の処理が出来ました。
パイプ…なるほど。考え方が根本的に
間違ってましたね。というか混乱してました。

汚いプログラムで申し訳なかったです。
ホントにありがとうございました。


返信引用
jaco
 jaco
(@jaco)
ゲスト
結合: 23年前
投稿: 4
Topic starter  

解決チェックを…


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました