Vito-
Utente Attivo
- Messaggi
- 193
- Reazioni
- 15
- Punteggio
- 43
Ciao a tutti, quando avvio questo codice sul terminale di Lubuntu il figliI 2 e 3 hanno lo stesso valore, sapete perché? Cosa sbaglio?
C:
#include "library.h"
void handler(int sig)
{
}
int main()
{
pid_t res;
int id, *ptr, num=0;
signal(SIGUSR1, handler);
srand(time(NULL));
printf("INIZIO PROGRAMMA\n\n");
id=shmget(IPC_PRIVATE, 4*sizeof(int), IPC_CREAT|0666);
if(id<0)
{
perror("ERRORE");
exit(1);
}
else
{
printf("[PADRE]:Ho creato una shared memory di 4 interi con ID %d.\n", id);
}
printf("[PADRE]:Inserisco un valore casuale nella shared memory.\n");
ptr=(int*)shmat(id, NULL, 0);
if((int)ptr==-1)
{
perror("ERRORE");
exit(1);
}
num=rand()%100+1;
ptr[0]=num;
shmdt(ptr);
for(int i=0;i<3;i++)
{
res=fork();
switch(res)
{
case -1:
perror("ERRORE");
exit(1);
case 0:
pause();
ptr=(int*)shmat(id, NULL, 0);
if((int)ptr==-1)
{
perror("ERRORE");
exit(1);
}
num=rand()%100+1;
ptr[i+1]=num;
printf("[FIGLIO %d]:Ho letto i valori:\n", i+1);
for(int k=0;k<i+2;k++)
{
printf("%d\n", ptr[k]);
}
pause();
default:
sleep(1);
printf("\n[PADRE]:Attivo il figlio %d...\n", i+1);
kill(res, SIGUSR1);
sleep(1);
kill(res, SIGKILL);
break;
}
}
printf("\n");
printf("FINE PROGRAMMA\n");
return(0);
}