• 締切済み

標準エラー出力の可否操作について

unix-cプログラムにてpopen()等により実行した結果、 popen()の引数に設定したコマンドのパスが設定されていない場合 標準エラー出力をはいてしまいます。 close(2)を実行することにより出力はまぬがれるのですが、 他箇所の標準エラー出力は表示させたいためclose(2)では実現できません。 何かpopen()実行時の標準エラー出力をさせず処理を進める良い方法はありませんでしょうか

みんなの回答

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.2

/dev/nullは入力データを捨てるための特殊デバイスです。 > popen()の引数ないに 2> /dev/nullと直接書いても 少し危険ですね。 環境変数SHELLが/bin/tcshだったりすると動作しません。 (標準エラー出力のリダイレクト方法が違うため) 「sh,bash,ksh以外のシェルは使わない!」と言う仕様ならオッケーだと思います。

  • toysmith
  • ベストアンサー率37% (570/1525)
回答No.1

・popenを使わず自前でpipeを制御する forkした後、子プロセス側でclose(2)すれば親プロセスのstderrを生かせたまま子プロセスのstderrを殺せます。 ・popenで起動させるプログラムをシェルスクリプトにする シェルスクリプト内で標準エラーを殺しておくだけです。 #!/bin/sh ls $* 2> /dev/null みたいな感じで。 方法は他にもありそうですね。

sting
質問者

お礼

popen()の引数ないに 2> /dev/nullと直接書いても 上手くいきました。 これでちょっとやってみようと思います。 ところで /dev/nullってどんな意味をもつのでしょうか?

関連するQ&A