2017-11-29 1 views
-2

각 루프에서 작성된 하위 프로세스를 사용하여 지수 테일러 확장을 평가하는이 c 프로그램을 실행하면이 합계의 자릿수를 부모에게 반환하고, 불량 파일 설명자 오류, 나는 왜 그런지 모르지만 루프에있는 파이프를 열고 닫는 방법에 문제가있을 수 있다고 생각합니다.파이프의 파일 설명자에 오류가 있습니다.

내 코드는 다음과 같습니다

#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]을 닫고 두 번째 자식을 분기 한 후에 부모로부터 더 이상 상속되지 않는 자식과 파이프 사이에 쓰기 파일 설명자가 연결되지 않습니다. 내 코드는 여전히 이것을 피하기위한 해결책을 찾아야합니다.

관련 문제