2016-04-01 52 views
-1

我正在寫一個程序,父親要求用戶插入數字以計算數字的階乘。這個數字在factorial.c計算C如何使用exec函數和管道獲取其他程序的結果

,所以我想我需要做的是:

-father請一些用戶:

-Factorial.c閱讀次數並計算出數

-Factorial.c寫數計算

-Do一個DUP2重定向輸出

 // 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"); 
    }  

而且現在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)和一個for來計算factorial.c中的階乘......也許我需要更多的代碼來使用dup和得到factorial.c的結果...但我想我不需要。 Sugestion? – Joseph

回答

0

很難猜測,因爲你沒有表現出足夠的重複你的問題,但似乎在這個代碼的問題:兒童(fork函數返回0至孩子和兒童PID到)你正確地寫到管道,並從其他管道讀取,但在另一個過程中,您無法將管道重定向到0和1個文件描述符。你應該寫:

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