2016-11-16 7 views
0

私はforkexecwaitの新機能をすべて新しくしています。私は割り当てを持っています。私はforkをメインプロセスにして、すべての子供を使って各プロセスごとに異なるFIFOに書き込みます。例えば、私が3人の子供を持っているならば、私は3つの異なる児童に書く必要があります。次に、私の親プロセスは、最初のものが任意のFIFO上の書き込みを終了し、その特定のFIFOからデータを読み込むのを待たなければなりません。私が困惑したことは、親プロセスが最初に完了するのを待たなければならず、すべてのプロセスが完了するのではないということです。私がすべてを待たなければならない場合は、while(wait(NULL)>0)を使用します。しかし、この場合はどうしますか?私は以下のサンプルコードを書いた:複数のフォーク、最初の完了を待ちます

pid_t *pid; 
int i; 

pid = malloc(sizeof(pid_t)*children); 
for(i=0;i<children;i++) 
{ 
    if((pid[i]=fork())<0) 
    { /* error */ } 

    if(pid[i]==0) 
    { 
      //WriteOnFifos 
      return 0; 
    } 
    else 
    { 
      //wait for the first process to finish 
    } 
} 

ありがとうございます。どんな助けもありがとう。

+0

コンパイルされません。 'fork'は関数呼び出しではありません –

+0

すみません、私は編集しません。 –

+0

編集しないでください。完全なコードを投稿してください。 –

答えて

0

wait(NULL)を使用してください。ドキュメントに記載されているように、子プロセスが終了するまで待機します。それで、あなたの望むこと、つまり、最初の子供が終わるのを待っています。

+0

最初のプロセスが終了した場合、親プロセスが続行され、最初のプロセスが書き込んだデータをfifoから読み込みます。残りのプロセスがジョブを終了せずに親プロセスから読み込みたい場合はどうなりますか?それを待つ方法はありますか? –

+0

これは別の質問です。私はあなたの質問を理解するか分からない。多分あなたはその話題に関するいくつかの基本的な理論を読むべきです。 'waitpid(pid、NULL、0)'を持つ特定の子を待つことができます。 –

+0

"プロセスの残りの部分がジョブを終了せず、親プロセスがそれらから読み込みたい場合はどうなりますか?"これは、FIFOから読み取るバイト数に依存します。子が書いたバイト数より多くのバイトを読み込んだ場合、 'read()'は通常ブロックします。 –

関連する問題