1

わかりました..だから私は別のプロセスで作業しようとしています..私は実際に|前に述べたように作成しようとしていls | sortます. . これを行うには、パイプが1つしかありません..しかし、プログラムのある時点で両方のコマンドを実行する必要があるため、2つexecvp()必要です。私は多かれ少なかれこれを行う方法を学びました..だから私は私の質問をできるだけわかりやすくするつもりです:

私には走っている子供がいて、彼の仕事はls. 実行する前に、パイプの書き込み側が標準出力を置き換えるようにしますexecvp()dup2(pipe1[1], 1)それが実行execvp()されると、彼は親に行き、親はその仕事が to である補助メソッドに入りfork()ます。pipe1これにより、別の子と親の関係が作成され、呼び出された へのポインターが渡されp1ます。このポインター itdup2(p1[0], 0)を使用して、stdin をパイプの読み取り側に置き換えます。理想的には、これを続けている限り、同じパイプを n 回使用できます。

この子は、前と同じことを行い、2 番目の引数を実行sortし、親に戻ります。親|は、コマンド ラインの次を指す整数フラグを返すNULLか、存在しない場合は終了します。これはできますか?これは可能ですか?それが私の質問です。

コードを投稿したいのですが、とても長いです。また、理論上、私が言ったことが可能かどうか、つまり複数の子に同じパイプを使用するかどうかにも興味があります。それを行うためのクリーンな方法があれば、それを指摘したいと思います。これを行うより良い方法があることは知っていますが、この方法で行いたいと思います。これは宿題ではなく、非再帰環境でパイプを操作するためのオプションの作業です。ありがとうございました。

4

1 に答える 1

1

パイプをコピーすることはできません。これはファイル記述子であり、2 つの端を持つパイプです。teeさらに名前付きパイプが必要な場合に使用します。

パイプをコピーできないということは、2 つのプロセスからパイプの一方の端にアクセスできないことを意味します。パイプはその内容をコピーできません。

于 2013-11-14T18:39:16.690 に答える