簡體   English   中英

C 如何使用exec函數和管道獲取其他程序的結果

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM