Ciao! Devo risolvere questo esercizio: due processi figli devono generare in maniera random un numero compreso nell'intervallo [1-6] e scrivere il risultato in una pipe. Per i due processi si usano due pipe distinte. La funzione utilizzata dai due processi è la stessa e gli vengono passati come parametri la pipe p[] e il numero di interi n che deve generare.
void giocatore(int p[],int n)
{
int j;
int x;
// generazione di N valori casuali e scrittura nella pipe p passata come parametro
close(p[READ]);
srand(time(NULL));
for(j=0;j<n;j++) {
x=rand()%6+1;
write(p[WRITE],&x,sizeof(int));
}
close(p[WRITE]);
}
Nel main creo i due processi e leggo le giocate (che sono n)
p1=fork();
if(p1==0) {
giocatore(p1p0,n); // p1p0 è la pipe dal processo figlio 1 al padre
exit(0);
}
p2=fork();
if(p2==0) {
giocatore(p2p0,n); // p1p0 è la pipe dal processo figlio 1 al padre
exit(0);
}
// Lettura degli N lanci dai figli
for (i=0;i<n;i++) {
printf("\n-----LANCIO %d-----\n", i+1);
read(p1p0[READ],&num1,sizeof(int));
printf("Il giocatore 1 ha fatto %d\n", num1);
read(p2p0[READ],&num2,sizeof(int));
printf("Il giocatore 2 ha fatto %d\n", num2);
sleep(2);
}
Il problema è che per ogni giocata i due processi generano sempre lo stesso intero, che cambia di giocata in giocata però è lo stesso per ogni singolo lancio per i due processi. Credo che dipenda dalla funzione giocatore e dall'utilizzo delle funzioni srand e rand. Come faccio a generare due numeri diversi per ogni giocata per ogni processo? Grazie!