- 締切済み
標準エラー出力の可否操作について
unix-cプログラムにてpopen()等により実行した結果、 popen()の引数に設定したコマンドのパスが設定されていない場合 標準エラー出力をはいてしまいます。 close(2)を実行することにより出力はまぬがれるのですが、 他箇所の標準エラー出力は表示させたいためclose(2)では実現できません。 何かpopen()実行時の標準エラー出力をさせず処理を進める良い方法はありませんでしょうか
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- 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 みたいな感じで。 方法は他にもありそうですね。
お礼
popen()の引数ないに 2> /dev/nullと直接書いても 上手くいきました。 これでちょっとやってみようと思います。 ところで /dev/nullってどんな意味をもつのでしょうか?