web-dev-qa-db-ja.com

cpopenはstderrをキャッチしません

popen()を使用して呼び出しのstderrをキャッチしようとしていますが、もちろんそれは行われていないようです。何か案は?

私のコードは多かれ少なかれ次のようになります:

popen("nedit", "r");

しかし、画面に非utf8に関するこのゴミがすべて表示されています...

22
poy

popenは、プロセスのstderrではなく、プロセスのstdoutのファイルハンドルを提供します。その最初の引数はシェルコマンドとして解釈されるため、リダイレクトを行うことができます。

FILE *p = popen("prog 2>&1", "r");

または、stdoutがまったく必要ない場合は、

FILE *p = popen("prog 2>&1 >/dev/null", "r");

/dev/null以外のファイルも使用できます。)

36
Fred Foo

すべてのエラーメッセージを破棄する場合は、次を使用できます。

popen("nedit 2>/dev/null", "r");
2
qbert220