- ベストアンサー
コマンド実行結果のエラー標準出力制御について
unix-cにて子プロセスにてexecvp()を使用しmailxコマンドを実行し、親プロセスにてmailxコマンドの実行結果に出力処理をしたいのですが、 どんなことがあろうと(パスが違うなど)標準出力させたくありません。 現在、fork(),pipe()を駆使して正常系は上手くできるようになったのですが、エラー時の標準出力(親、子とも)を防ぐことが できません。何か良い方法はないでしょうか?
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
エラー出力は標準エラー出力に出力されます。 標準エラー出力をpipe()で取り込めば良いと思われます。
お礼
回答ありがとうございます。 以下のようにして一応できました。しかし、自分で作っておきながら なぜ上手くいってるのか・・・。 親プロセスがわにclose(2)を書くと上手くいかないのはなぜでしょうか? void main(){ int pfd[2]; int pid; pipe(pfd); if (fork() == 0) { close(2); close(1); dup2(pfd[0],0); close(pfd[0]); close(pfd[1]); execvp("mailx",NULL); exit(); } else { close(pfd[0]); fp = fdopen(pfd[1],"w"); fprintf(fp,"s %s\nq\n","/tmp/exa/mail1"); fclose(fp); wait(0); } } ~