こんにちは、私はこのコンセプトの頭を抱えています。私は2つのファイルを実行する必要がC unixの外部ファイル(または制御ファイル)から2つのファイルをパイプする
は(私は、そのファイル記述子を理解し、私はパイプにBC
の入力に交流の出力をしたいcontrol.c
と呼ばれる制御ファイルからAC & BCを言うことができますFD): FD 0 = STDIN FD 1 = STDOUT
Iパイプを作成する整数の配列(二FDS)
e.g.
zpipe[2]
pipe(zpipe)
を必要とすることを理解します
ファイルaとbを実行し、出力aをbの入力にパイプしたいと考えています。
しかし、このファイルを開いたり読んだりすることは、新しいファイルシステムを作成するという概念では混乱しています。 fda = dup2(fd、0)を呼び出して、fd(例えばfda)を0に設定できることを理解しています。 0が今閉じられているので、これはパイプを壊さないでしょうか?私は
execvp("a.c", args)
execvp("b.c", args)
を呼び出した場合
どのように私は、これらのファイルが正しくパイプとを待っていることを確認しますか?
execvpの( "AC、引数)
私は
execvpのを呼び出すされての必要があります("「./ A、引数)
ルーキーミス私の謝罪を(と呼ばれる場所普通は、 'ac'はCソースファイルで、スタンドアロンのプログラム' a'(あるいは 'a.exe')にコンパイルされます。プログラムを実行したり、実行したりします。 '' bc''と '' b''のような実行可能なプログラムを持つことは普通ではないでしょうが(不可能ではありませんが、間違いありません) 'if(dup2(zpipe [0]、0)!= 0 ){...ハンドルエラー...} '、またはif(dup2(zpip e [1]、1)!= 0){...ハンドルエラー...} '。 –
'control'がパイプとフォークを2回、' a'を実行するために1回、 'b'を実行するために1回、' control'が 'a'や' b'のいずれかで置き換えるかどうかを決める必要があります。 'control'フォークと子がパイプを作成し、フォークを作成し、孫が1つのプロセス(' a'または 'b')を実行し、子がもう一方を実行し、' control'が子プロセスを終了するのを待ちます。すべて可能です。他の情報がない場合、「最良の」解決策があることは明らかではありません。 'control'がそれ以上の処理を行う必要がある場合、シングルフォークの解決法は適切ではありません。 –
こんにちはJonathan a.cは純粋に例の名前として使用されましたが、ex1.cとex2.cなどであった可能性があります。私が何をしようとしているのかという目的は、a.c(または場合によってはex1.c)からの入力を取得し、処理と出力のためにそれらをb.cに送ることです。しかし、さらなる研究の後、ベストプラクティスは「パイプとフォークを2回作成する」方法だと指摘されていますが、パイプの流れを制御する方法を理解するのにまだ苦労しています - – rowboat