2010-11-24 7 views
0

でそれを使用して取得私はコードの下に書きましたが、最後のprintfはsumofallの戻り0どのように私は、子供からsumoro、sumortとsumorthの値を取得することができます子からの値が親

コード:

#include <stdio.h> 
#include <sys/types.h> 
#include <unistd.h> 
#include <sys/wait.h> 
#include <stdlib.h> 
int main() 
{ 
    int array[3][3]; 
    int sumoro = 0,sumort = 0,sumorth = 0; 

    pid_t pid = fork(); 

if (pid < 0) { 
    printf("fork faild"); 
    exit(1); 
} 
else { 

    if (pid == 0) 
    { 
     for (int i = 0; i < 3 ; i++) { 
      for (int j = 0; j < 3; j++) { 
       array[i][j] = rand()%9; 
       if (i == 0) 
       sumoro += array[0][j]; 
       if (i == 1) 
       sumort += array[1][j]; 
       if (i == 2) 
       sumorth += array[2][j]; 
      } 
     } 
    } 
    else { 
     waitpid(pid, NULL, 0); 
     int sumofall = sumoro + sumort + sumorth; 
     printf("sum of all equal : %d ", sumofall); 
    } 


return 0; 

    } 
} 

注:必ずしもしかし、あなたは私を助けることができる場合、どのように私は(ランドを作ることができないが)毎回新しい番号を与える私は、同じ値

答えて

1

に確認してくださいそのため

srand (time(NULL)); 

を使用してみてください、時間/日付でそれをシードすることです。データを前後に移動する簡単な方法はありません。少なくとも、変数を読み取るだけの簡単な方法はありません。匿名パイプ(pipe(2)のマニュアルページを参照)など、何らかの種類のプロセス間通信(IPC)メソッドを使用する必要があります。

rand()については、乱数ジェネレータに比較的ランダムな値を設定する必要があります。プログラムの始めに、にしてください。

srand(time(NULL));

これは、同じ秒で2回実行しない限り、プログラムを実行するたびにRNGを異なる値でシードするために時計を使用します。

+0

私は共有メモリを使用しました#include #include 子の親子の2番目のポインタで最初に –

1

基本的に、あなたの値を加算部分とあなたたびに気づくので、それらを印刷するプロセスは異なります。

rand()の場合は、シードで初期化する必要があります。デフォルトでは0でシードされています。そのため、常に同じシーケンスが得られます(randの値はどのように表示されますか? 。どのような通常行われていることは、それは常に違うように、あなたはフォーク、各プロセスはその後、自身のスペースにあるとき#include <time.h>

関連する問題