2010-11-24 5 views
0

schrieb ich den Code unten, aber der letzte printf return 0 für sumofall, wie kann ich die Werte von sumoro, sumort und sumorth von Kind bekommen-Werten von Kind bekommen, um es in Mutter zu verwenden

der Code:

#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; 

    } 
} 

Hinweis: nicht unbedingt, aber wenn Sie mir helfen können, wie kann ich die rand() verwenden gibt neue Zahlen jedes Mal, weil ich jedes Mal dieselben Werte bemerken

Antwort

1

Wenn Sie Gabel, jeder Prozess in einem eigenen Raum befindet sich danach . Es gibt keine einfache Möglichkeit, Daten hin- und herzubewegen - zumindest nichts so einfaches wie das Lesen einer Variablen. Sie müssen eine Art von Inter-Process Communication (IPC) -Methode verwenden, z. B. anonyme Pipes (siehe Handbuchseite pipe (2)).

Wie für rand(), müssen Sie den Zufallsgenerator mit einem relativ zufälligen Wert seed. Eine einfache Lösung mit ausreichender Zufälligkeit für so ziemlich alles andere als Kryptographie veröffentlicht diese Aussage einmal zu Beginn des Programms:

srand (time (NULL));

Dies verwendet die Uhr, um den RNG mit verschiedenen Werten zu säen, jedes Mal, wenn Sie Ihr Programm ausführen, es sei denn, Sie schaffen es, es zweimal mit der gleichen Sekunde auszuführen.

+0

danke ich habe den gemeinsamen Speicher verwendet #include #include mit 2 Zeiger zuerst in der Elternteilzweiter im Kind –

1

Grundsätzlich ist der Teil, wo Sie Ihre Werte addieren und wo Sie Drucke sie sind auf verschiedenen Prozessen.

Für rand() was Sie tun müssen, ist es mit einem Startwert zu initialisieren, standardmäßig ist es mit 0 gesetzt, deshalb gibt es Ihnen immer die gleiche Sequenz (Wie sehen Sie die Werte, die rand Ihnen sowieso gibt?) . Was in der Regel geschehen ist, ist es mit der Zeit/Datum zu impfen, so dass es immer anders, versuchen

srand (time(NULL)); 

mit dafür stellen Sie sicher, #include <time.h>

Verwandte Themen