2017-11-29 3 views
-2

Ausführen dieses c-Programms, das die exponentielle Taylorexpansion auswertet, mit einem untergeordneten Prozess, der in jeder Schleife erstellt wird und eine Ziffer dieser Summe an den übergeordneten Wert zurückgibt, führt mich zu einem BAD FILE DESCRIPTOR ERROR. obwohl ich nicht weiß, warum, ich denke, das Problem kann in der Art sein, wie ich das Rohr in der Schleife öffnen und schließen und so.Fehler in Dateideskriptoren einer Pipe

Mein Code ist:

#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;} 

Antwort

2

Schließen der jeweiligen Lese-/Schreib Enden des Rohres, nachdem Sie Gabel vor nicht.

+1

immer noch, jetzt sowohl beim Lesen und Schreiben, ich empfange die gleiche Fehlermeldung –

0

Ich denke, ich habe das Problem herausgefunden, aber ich weiß immer noch nicht, wie zu lösen; Nach dem Schließen von p [1] im Elternprozess und nach dem Abzweigen des zweiten Kinds wird kein Schreibdateideskriptor zwischen dem Kind und der Pipe zugeordnet, da es nicht mehr vom Elternteil geerbt wird. Ich markierte den falschen Befehl in Mein Code, muss immer noch eine Lösung finden, um dies zu vermeiden.

Verwandte Themen