2007年5月18日金曜日

Pipe

 c++でツールを作っていて子プロセスをCreateProcess()していた。で、色々やっていくうちに子のstdinに親から入力できれば便利だなと調べているとどうもCreatePipe()やらDuplicateHandle()を使えばできそうなことが分かってきた。でもなんだかうまく行かない。どうしても子がいきなりEOFを検知してすぐに終了してしまう。

 それから散々MSの例とかを見比べているのだがおかしなところはない。あーだこーだ調べていてようやく分かった。CreateProcess()の第5引数がTRUEでなければならないところがFALSEになっている!!!Pipeの処理を入れる前はHandleの継承不要だったけどそれが必要になったのか。 そこを修正したらあっさり動いた。

教訓「初めての処理はとりあえず全部コピってそこから改造しろ」

とは言ってもついめんどくさがって結局遠回りしてしまう愚かさ。