3

私はしばらくこれにこだわっていますが、stdout を 2 つの異なる場所にリダイレクトすることは可能ですか? 練習用に独自のシェルを作成しており、現在、ps aux | wc -lまたはのようなコマンドを実行できますps aux | wc -l > output.file。ただし、 を実行しようとするps aux > file.out | wc -lと、2 番目のコマンドは最初のコマンドからの入力を受け取りません。

最後の例では、最初のコマンドが子プロセスで実行され、パイプの一端に出力されます。ロジックは次のようになります。

close(stdout);
dup2(fd[1], STDOUT_FILENO);

//If a file output is also found
filewriter = open(...);
dup2(filewriter, STDOUT_FILENO);

//Execute the command
4

2 に答える 2

4

通常の UNIX シェルも、その構文では機能しません。UNIX (およびその他のいくつかの OS) は、tee[1] コマンドを提供して、出力をファイルに送信しますstdout

例: ps aux | tee file.out | wc -l

[1] http://en.wikipedia.org/wiki/Tee_(command)を参照

于 2014-07-17T14:40:06.997 に答える
2

このteeコマンドは、UNIX でまさにそれを行います。C でそれを行う方法を確認するには、tee のソース コードを参照してください。

于 2014-07-17T14:45:31.497 に答える