2017-09-20 9 views
0

あなたは私が印刷されているものであることを連続可変出力(0.50)を必要と現時点で waitpid() のパラメータを変更することができる場合、私は思ったんだけど。しかし、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-ページ/ 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に制限されています。それも問題を引き起こす可能性があります。 elseの連鎖を持つ入れ子のifは不器用です。 fork(子)からの戻り値0をフォークしてテストし、次の子をフォークする何らかのアクションを実行する方が良いでしょう。 –

+0

ええ、私の問題は浮動小数点の戻り値が必要です。だから、私はwaitpidの仕事を呼び出した後にキャストするのだろうか? – Dreeww

答えて

3

ように見えることを意味するpid_t waitpid(pid_t pid, int *status, int options);の三番目のパラメータは、このように使用すると、浮動小数点を渡すことができない、intありますそこの価値。

このような値を実際に渡すのは意味がありません。あなたはもっと勉強し、あなたのアプローチを再考する必要があります。

+1

ええ、私は分割計算機への私のアプローチが間違っていたと思います。 – Dreeww

関連する問題