2016-04-01 12 views
-1

私は、父親がユーザーに数値の階乗を計算するために数値を挿入するように求めるプログラムを書いています。その数はfactorial.cC exec関数とパイプで他のプログラムの結果を得る方法

で計算されるので、私は何をする必要があるかを推測です:

ユーザーに番号を尋ねる-Father:

数を読み、数を計算-Factorial.c

-Do出力を

 // 2 Pipe and Fork created 
     if(x == 0){ //Father 

     close(p1[0]); 
     write(p1[1],&number_by_keybord, BUFFER); 
     close(p1[1]); 
     close(p[1]);  

     dup2(p[0],0); //Read the number returned by factorial.c 
     read(p[0], &num_factorial,BUFFER); 
     printf("Pipe: factorial %d\n", num_factorial);   
     close(p[0]);     
     wait(NULL); 

    }else{   
    execlp("./factorial", "factorial", NULL); 
    perror("Exec error\n"); 
    }  
をリダイレクトするdup2の計算数を書き込む-Factorial.c 0

そして今factorial.c

void main(){ 
     read(0,&num,sizeof(int)); 

     //Number calculated 

     write(1,&result,sizeof(int)); 
    return 0; 
    } 

しかし、私は、プログラムがフリーズを実行するか、単にdup2の持つ任意のproblemaはあり

を計算乱数を置きますか?私は正しい結果を得るためにdup2(、0)を実行しなければならず、階乗で私は読み書きが必要です。

ありがとう!

+0

どうすればよいですか?私はここに質問が表示されません。質問は疑問符(***?***)で終了します – abelenky

+1

問題を再現するのに十分なコードを提示していません。 –

+0

残りのコードは、パイプとフォークを作成するメソッド、ユーザー(number_by_keybord)の数値とfactorial.cの階乗を計算するためのメソッドです。おそらく、私はdupを使うためにもっとコードが必要です。 factorial.cの結果を得るために...しかし、私は必要がないと思う。収穫? – Joseph

答えて

0
あなたはあなたの問題を再現するために十分示しているが、このコードに問題があると思われないので、推測されにくい

:子供にあなたが正しく書く(フォークが0からと子のpidを親に戻ります)パイプに読み込み、他のパイプから読み込みますが、他のプロセスではパイプを0のファイル記述子にリダイレクトできません。

... 
}else{ 
    dup2(p1[0], 0); 
    dup2(p[1], 1); 
    execlp("./factorial", "factorial", NULL); 
    perror("Exec error\n"); 
} 
関連する問題