2016-05-22 5 views
0

私は基本的なエクササイズにパイプを使い始めました。プロセスAとBから、2つの乱数が得られます。プロセスCはこれらの2つの数値の和を計算し、それを印刷します。 問題は、読み込みから正しい値を取得できないことです。パイプに入力する値は終了する値ではありません。パイプが正確な情報を送信していません

ここで問題は何ですか?

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


int main(){ 

    int ac[2],bc[2]; 
    int f,g; 
    if(pipe(ac)<0 || pipe(bc)<0){ 
     perror("Pipe error"); 
     exit(1); 
    } 

    f=fork(); 

    if(f<0){ 
     perror("Error fork1"); 
     exit(2); 
    } 
    if(f==0){ 
     g=fork(); 
     if(g<0){ 
      perror("Error fork2"); 
      exit(3); 
    } 
    if(g==0){ 
      printf("We are in A \n"); 
      int variab=rand()%11+10; 
      printf("Here we found the number %d\n",variab); 
      write(ac[1],&variab,sizeof(int)); 
    } 
    else{ 
      wait(0); 
      printf("We are in B\n"); 
      int variab2=rand()%6+5; 
      printf("Here we found the number %d\n",variab2); 
      write(bc[1],&variab2,sizeof(int)); 
    } 
    } 
    else{ 
     wait(0); 
     printf("We are in C\n"); 
     int suma; 
     int s1=read(ac[0],&s1,sizeof(int)); 
     printf("S1=%d\n",s1); 
     int s2=read(bc[0],&s2,sizeof(int)); 
     printf("S2=%d\n",s2); 
     suma=s1+s2; 
     printf("Sum is %d\n",suma); 
    } 
    close(ac[0]); 
    close(ac[1]); 
    close(bc[0]); 
    close(bc[1]); 
    return 0; 
} 
+1

int s1 = read(ac [0]、&s1、sizeof(int)); '可能ですか? 'int s1のようなものでなければならない。 read(ac [0]、&s1、sizeof(int)); '? –

+0

本当に、私はあなたよりも慎重ではなかった – Darkmer

答えて

2

問題は、あなたがリード動作が受信したバイトの量を取得したい値を上書きしているライン

int s1=read(ac[0],&s1,sizeof(int)); 
... 
int s2=read(bc[0],&s2,sizeof(int)); 

です。

はライン

int s1; 
read(ac[0],&s1,sizeof(int)); 

(同様s2付き)を壊すことでs1s2に新しい値を代入していないことを確認し、それが動作します。

+0

ありがとう – Darkmer

関連する問題