[英]C How to get the result of other program with exec functions and pipes
我在 ca 程序中寫道,父親要求用戶插入數字來計算數字的階乘。 該數字是在 factorial.c 中計算的
所以我想我需要做的是:
- 父親向用戶詢問一個號碼:
-Factorial.c 讀取數字並計算數字
-Factorial.c 寫出計算出的數字
- 執行 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有什么問題嗎? 我想檢索正確的結果我必須做 dup2( , 0) 並且在階乘中我需要讀取和寫入
謝謝!
很難猜測,因為您沒有表現出足夠的內容來復制您的問題,但是此代碼中似乎存在問題:在 child (fork 返回 0 給child和 child pid 給parent )中,您正確地寫入管道,並從其他管道讀取管道,但在另一個進程中,您無法將管道重定向到 0 和 1 文件描述符。 你應該寫:
...
}else{
dup2(p1[0], 0);
dup2(p[1], 1);
execlp("./factorial", "factorial", NULL);
perror("Exec error\n");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.