stella_650
02-07-2008, 08:59
Ciao a tutti,
ho un problema riguardante la comunicazione tramite pipe relativo ad una somma di N righe di una matrice. Nel caso specifico creo la matrice 3*3, creo 3 processi ciascuno dei quali si occupa di calcolare la somma su ciascuna riga. Nel momento in cui uso la write sul descrittore di scrittura della pipe, mi rendo conto che non viene comunicato bene quel valore. La domanda è:
E' corretto passare un valore intero tramite le seguenti istruzioni?
int main(void)
{
int i,j,num,matrice[3][3],pfd1[2],pfd2[2],somma1i,somma2i,somma3i,somma1r,somma2r,somma3r,somma12i,somma23i,somma12r;
pid_t pid1,pid2,pid3;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
num=rand()%11; //genera numeri casuali tra 0 e 10
matrice[i][j]=num;
printf("matrice [%d][%d] = %d\n",i,j,matrice[i][j]);
}
}
if((pid1=fork())<0)
{
printf("Errore fork!\n");
perror("fork");
}
if(pid1==0)
{
printf("FIGLIO 1 %d\n",getpid());
somma1i=0;
for(j=0;j<3;j++)
somma1i=somma1i+matrice[0][j];
printf("Somma1 = %d\n",somma1i);
close(pfd1[0]);
close(pfd2[0]);
close(pfd2[1]);
//scrivere sulla prima pipe la prima somma
write(pfd1[1],&somma1i,sizeof(somma1i));
close(pfd1[1]);
exit(0);
}
//secondo figlio.....
......
read(pfd1[0],&somma1r,1);
printf("FIGLIO 2 %d riceve somma1 %d\n",getpid(),somma1r);
.......
Questo è solo la prima parte relativa alla scrittura del primo valore calcolato sulla prima riga. ma già qui non funziona la ricezione del primo valore.
Cosa è che non va?
Grazie a priori.
ho un problema riguardante la comunicazione tramite pipe relativo ad una somma di N righe di una matrice. Nel caso specifico creo la matrice 3*3, creo 3 processi ciascuno dei quali si occupa di calcolare la somma su ciascuna riga. Nel momento in cui uso la write sul descrittore di scrittura della pipe, mi rendo conto che non viene comunicato bene quel valore. La domanda è:
E' corretto passare un valore intero tramite le seguenti istruzioni?
int main(void)
{
int i,j,num,matrice[3][3],pfd1[2],pfd2[2],somma1i,somma2i,somma3i,somma1r,somma2r,somma3r,somma12i,somma23i,somma12r;
pid_t pid1,pid2,pid3;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
num=rand()%11; //genera numeri casuali tra 0 e 10
matrice[i][j]=num;
printf("matrice [%d][%d] = %d\n",i,j,matrice[i][j]);
}
}
if((pid1=fork())<0)
{
printf("Errore fork!\n");
perror("fork");
}
if(pid1==0)
{
printf("FIGLIO 1 %d\n",getpid());
somma1i=0;
for(j=0;j<3;j++)
somma1i=somma1i+matrice[0][j];
printf("Somma1 = %d\n",somma1i);
close(pfd1[0]);
close(pfd2[0]);
close(pfd2[1]);
//scrivere sulla prima pipe la prima somma
write(pfd1[1],&somma1i,sizeof(somma1i));
close(pfd1[1]);
exit(0);
}
//secondo figlio.....
......
read(pfd1[0],&somma1r,1);
printf("FIGLIO 2 %d riceve somma1 %d\n",getpid(),somma1r);
.......
Questo è solo la prima parte relativa alla scrittura del primo valore calcolato sulla prima riga. ma già qui non funziona la ricezione del primo valore.
Cosa è che non va?
Grazie a priori.