2010-11-24 2 views
0

je l'ai écrit le code ci-dessous, mais le dernier retour printf 0 pour sumofall comment puis-je obtenir les valeurs de sumoro, sumort et sumorth de l'enfantobtenir une valeur de l'enfant à l'utiliser dans parent

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

    } 
} 

note: pas nécessairement, mais si vous pouvez me aider, comment puis-je faire le rand() donne everytime nouveaux chiffres parce que je remarque chaque fois les mêmes valeurs

Répondre

1

Lorsque vous fork, chaque processus réside dans son propre espace après . Il n'y a pas de moyen facile de déplacer les données d'avant en arrière - du moins rien de plus simple que de lire une variable. Vous devez utiliser une méthode de type Inter-Process Communication (IPC), telle que les pipes anonymes (voir la page de manuel pipe (2)). Pour rand(), vous devez ensemencer le générateur de nombres aléatoires avec une valeur relativement aléatoire. Une solution simple avec un caractère aléatoire suffisant pour à peu près tout sauf cryptographie émet cette déclaration une fois au début de votre programme:

srand (temps (NULL)); Ceci utilise l'horloge pour amorcer le RNG avec différentes valeurs chaque fois que vous exécutez votre programme, sauf si vous réussissez à l'exécuter deux fois avec la même seconde.

+0

merci j'ai utilisé la mémoire partagée #include #include avec 2 pointeur d'abord dans la seconde parent de l'enfant –

1

Fondamentalement, la partie où vous ajoutez vos valeurs et où vous imprimez-les sur différents processus. Pour rand() ce que vous devez faire est de l'initialiser avec une graine, par défaut il est ensemencé avec 0, c'est pourquoi il vous donne toujours la même séquence (comment voyez-vous les valeurs que rand vous donne quand même?) . Ce qui est généralement fait est l'ensemencer avec l'heure/date pour que ce soit toujours différent, essayez d'utiliser

srand (time(NULL)); 

pour ce assurez-vous de #include <time.h>

Questions connexes