c++でツールを作っていて子プロセスをCreateProcess()していた。で、色々やっていくうちに子のstdinに親から入力できれば便利だなと調べているとどうもCreatePipe()やらDuplicateHandle()を使えばできそうなことが分かってきた。でもなんだかうまく行かない。どうしても子がいきなりEOFを検知してすぐに終了してしまう。
それから散々MSの例とかを見比べているのだがおかしなところはない。あーだこーだ調べていてようやく分かった。CreateProcess()の第5引数がTRUEでなければならないところがFALSEになっている!!!Pipeの処理を入れる前はHandleの継承不要だったけどそれが必要になったのか。
そこを修正したらあっさり動いた。
教訓「初めての処理はとりあえず全部コピってそこから改造しろ」
とは言ってもついめんどくさがって結局遠回りしてしまう愚かさ。
0 件のコメント:
コメントを投稿