2012-05-14 11 views
0

私はC++で書かれた2つのプロセスをパイプでつなぎます。 1つは、もう一方の標準にいくつかの情報を与えます。stdoutとスクリプトを閉じる

問題は、交換するデータがなくなっても、cin.getline()内で2番目のプロセスがハングすることです。最初のプロセスの解決策はfclose(stdout)でしたが、それはスクリプトでラップされたプロセスを使用する場合を除いて動作します。だから明らかに、スクリプトのstdoutは、プロセスによって閉じた後もまだ開いています。これは公正だと思われますが、私の場合は閉じますか?ありがとう

+1

なぜあなたはしたいですか?あなたは何をしようとしているかに関する情報をあまり提供しません。 – Thor

+0

コメントありがとうございます。要点は、プロセスBがstdinを反復してから別のことをしなければならないということです。しかし、プロセスA(ライター)は決して終わらないので、入力はEOFを含まないので、プロセスBは移動するのではなく入力を待つ。 – haelix

答えて

0

あなたのプログラムは終了しないので、your-programの代わりにexec your-programをスクリプトに入れ、パイプの書き込み側(およびその他のもの)にファイルのディスクリプタを保存します。

また、プログラムをバックグラウンドで起動し、スクリプトを終了することもできます。

標準出力を閉じることもできますが、プログラムを起動する前にこれを行うと、クローズドファイル記述子を使用できなくなります。だからを閉じて、プログラムが実行中のを閉じなければなりません。これはまったく些細なことではありません。私はバックグラウンドでプログラムを開始し、標準出力を閉じて(そのためにexec 1>&-を使用して)、プログラムをフォアグラウンドに戻すことを考えることができます。

関連する問題