マルチプロセスとパイプ
Posted: 2011年2月04日(金) 02:12
マルチプロセスでcmd.exeを起動し、
親プロセスの方で
fgets(command,256,stdin);
command[strlen(command)-1] = '\0'; //改行が含まれるのでNULLで削除
という入力をパイプを介し、子プロセスのcmd.exeへ入力。
その後、cmd.exeの結果をパイプを介し、親プロセスで出力結果を受け取り
printf("%s",buf);
というようにやりたいです。
子プロセスの作成はCreateProcess()でいいとして、
パイプは匿名と名前付きのどちらになるのでしょうか?
匿名パイプは送信か受信のどちらか一つしか選べない。(あやふやです。もしかしたらできる?)
逆に名前付きパイプなら送受信両方できるけど子プロセスは標準のcmdなので名前付きパイプは使えない。(こっちもあやふやです。もしかしたらできる?)
別にcmd.exeだけでなくVC++2010コマンドプロンプトを子プロセスにするのでもいいんですけど。。。
「どうせ結果はまったく同じだからこんなの作っても無意味。」
「普通にcmd.exe起動した方が早い。」
などの回答はごもっともで正論ですが、とりあえずこの回答はなしの方向で。。。
とりあえず、今やってみたことは、
最初に匿名パイプを作成し、次に子プロセスを作成しています。
そこまで出来たら、
WriteFile()でコマンドを送信。という形です。
受け取りはまだ作っていません。
というか作れないから質問しています。
それから子プロセスを作成したあとはcmdを開いたときと同じようなコンソール画面になります(CreateProcess()をやっているので当然です)。
そこでためしに入力してみるとコンソールにMore?と言う文字が返ってくるだけで結果が表示されません。
これはなぜでしょうか?
パイプを通さないでただ単に子プロセスだけを作成した場合はちゃんとコマンドを打つと結果が返ってきます。
開発環境
VC++ 2010
WinXP
親プロセスの方で
fgets(command,256,stdin);
command[strlen(command)-1] = '\0'; //改行が含まれるのでNULLで削除
という入力をパイプを介し、子プロセスのcmd.exeへ入力。
その後、cmd.exeの結果をパイプを介し、親プロセスで出力結果を受け取り
printf("%s",buf);
というようにやりたいです。
子プロセスの作成はCreateProcess()でいいとして、
パイプは匿名と名前付きのどちらになるのでしょうか?
匿名パイプは送信か受信のどちらか一つしか選べない。(あやふやです。もしかしたらできる?)
逆に名前付きパイプなら送受信両方できるけど子プロセスは標準のcmdなので名前付きパイプは使えない。(こっちもあやふやです。もしかしたらできる?)
別にcmd.exeだけでなくVC++2010コマンドプロンプトを子プロセスにするのでもいいんですけど。。。
「どうせ結果はまったく同じだからこんなの作っても無意味。」
「普通にcmd.exe起動した方が早い。」
などの回答はごもっともで正論ですが、とりあえずこの回答はなしの方向で。。。
とりあえず、今やってみたことは、
最初に匿名パイプを作成し、次に子プロセスを作成しています。
そこまで出来たら、
WriteFile()でコマンドを送信。という形です。
受け取りはまだ作っていません。
というか作れないから質問しています。
それから子プロセスを作成したあとはcmdを開いたときと同じようなコンソール画面になります(CreateProcess()をやっているので当然です)。
そこでためしに入力してみるとコンソールにMore?と言う文字が返ってくるだけで結果が表示されません。
これはなぜでしょうか?
パイプを通さないでただ単に子プロセスだけを作成した場合はちゃんとコマンドを打つと結果が返ってきます。
開発環境
VC++ 2010
WinXP