2017-09-20 48 views
0

我想知道您是否可以更改參數 waitpid() 此刻我需要連續變量輸出(0.50)作爲打印內容。但是,考慮到waitpid()只接受整數,當我嘗試打印輸出時,它給我0.不確定如何解決這個問題,或者如果這甚至是問題。更改waitpid參數()

計算是指看起來像(1+(2 * 3)/(2 * 7))= 0.5

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <sys/wait.h> 

int main(){ 


    int a = 1, b = 2, c = 3, d = 2, e = 7; 

    int a_plus_pid, b_times_c_pid, d_times_e_pid; 

    int a_plus, b_times_c, d_times_e; 

    a_plus_pid = fork(); 
    if(a_plus_pid) 
     { 
      b_times_c_pid = fork(); 
      if(b_times_c_pid) 
      { 
        d_times_e_pid = fork(); 
        if(d_times_e_pid) 
        { 

         waitpid(a_plus_pid, &a_plus, 0); 
         waitpid(b_times_c_pid, &b_times_c, 0); 
         waitpid(d_times_e_pid, &d_times_e, 0); 

         //Supposed to print 0.50 
         printf("%d" , ((a + (b_times_c)))/d_times_e); 

        } 
        else 
        { 
         exit(d*e); 
        } 
      } 
      else 
      { 
       exit(b*c); 
      } 
     } 
     else 
     { 
      exit(a); 
     } 

} 
+0

閱讀http://advancedlinuxprogramming.com/並花費幾天的時間閱讀東西(包括[waitpid(2)](http://man7.org/linux/man-pages/man2/waitpid.2.html) ,[fork(2)](http://man7.org/linux/man-pages/man2/fork.2.html),[pipe(7)](http://man7.org/linux/man- pages/man7/pipe.7.html),[execve(2)](http://man7.org/linux/man-pages/man2/waitpid.2.html),[popen(3)](http: //man7.org/linux/man-pages/man3/popen.3.html)..)。你的問題表明了一個深刻的誤解,沒有多少意義。另請閱讀[操作系統](http://pages.cs.wisc.edu/~remzi/OSTEP/) –

+0

您的所有算法都是整數算術;你永遠不會得到它的浮點值。您的退出代碼限制爲255;這也可能會導致問題。嵌套的ifs與其他鏈的嵌套感覺笨拙。你最好分叉和測試fork(孩子)的返回值,然後做一些其他的動作來分岔下一個孩子。 –

+0

是的,這是我的問題,我需要一個浮點返回。所以即時通訊不知道會調用waitpid工作後投射? – Dreeww

回答

3

pid_t waitpid(pid_t pid, int *status, int options);第三個參數是一個int,因而不能傳遞一個浮點價值在那裏。

作爲一個事實,在那裏傳遞這樣的價值是沒有意義的。你需要更努力學習,並重新考慮你的方法。

+1

是的,我認爲我對分部計算器的做法是錯誤的。 – Dreeww