2017-11-29 2 views
-2

指数関数的テイラー展開を評価するこのcプログラムを実行し、各ループで作成された子プロセスを使用して、この合計の桁を親に戻し、その結果をBAD FILE DESCRIPTOR ERROR、私はなぜそれがわからないのですが、私はループなどでパイプを開いたり閉じたりする方法に問題があると思います。パイプのファイル記述子にエラーがあります

私のコードは次のとおりです。あなたが前にいないフォーク後

#include<unistd.h> 
#include<stdio.h> 
#include<sys/wait.h> 
#include<stdlib.h> 
int main() 
{int i; pid_t id; 
int count=1; 
int fact=1; 
int N; 
double S=1;double s1=0; double div;double x; 
int p[2]; 

printf("Input x and N : \n"); 
scanf("%lf %d",&x,&N); 
if(pipe(p) == -1) 
{perror("Error opening pipe"); 
return -1; } 
else{ 
for(i=1;i<=N;i++) 
{ id=fork(); 
    if(id==0) 
    { close(p[0]); 
     while(count<i) 
     { fact*=(fact+1); 
         x*=x; 
      count++; 
     } 

    div=x/fact; 
    if(write(p[1],&div,sizeof(double))!=sizeof(double)) 
    perror("file writing error"); 
    exit(0); 
    } 
    else { 
     wait(NULL); 
     close(p[1]); \\ ***<-- Problem here*** 
     if(read(p[0],&s1,sizeof(double))!=sizeof(double)) 
{ 
perror("file become empty");   
return -1;} 
     S+=s1; 
    }}} 
printf("Sum = %lf",S); 
return 1;} 

答えて

2

は、パイプのそれぞれの読み取り/書き込みが終了を閉じます。

+1

まだ、両方とも読み書き中ですが、同じエラーメッセージを受け取っています –

0

私は問題を発見したと思うが、それでも私は解決する方法を知らない。親プロセスのp [1]が終了し、2番目の子プロセスをフォークした後、親プロセスから継承されていないので、子プロセスとパイプの間に書き込みファイル記述子は関連付けられません。私のコードは、これを避けるための解決策を見つける必要があります。

関連する問題