Concetti Chiave
- Il programma utilizza la funzione fork() per creare processi multipli che interagiscono tra loro.
- Un processo genera numeri casuali e attende che l'altro processo tenti di indovinarli.
- I processi comunicano tra loro utilizzando pipe per scambiare dati come numeri generati e feedback.
- Il secondo processo riceve un numero da indovinare e invia il suo tentativo attraverso una pipe.
- Il programma termina quando il numero indovinato dal secondo processo corrisponde a quello generato.
inizializzazione e creazione dei processi
#include
#include
#include
#include time.h>
#include
#include
#define NUMF 1
int main()
{
int processID,processID2,num=0,indovina;
int p[2];
int p2[2];
//int tempo;
char verifica;
pipe(p);
pipe(p2);
processID2=fork();
if(processID2==0)
{
while(1)
{
usleep(5000000);
indovina=-1;
write(p[1],&indovina,sizeof(indovina));
}
}
else
{
srand(time(NULL));
processID=fork();
if(processID==0 ) //secondo processo
{
while(1)
{
read(p[0],&indovina,sizeof(indovina));
if(indovina==-1)
{
printf("\nNuovo numero generato: ");
num=(rand()%10+1);
printf("%d\n",num);
}
else if(indovina==num)
{
verifica='=';
write(p2[1],&verifica,sizeof(verifica));
return 0;
}
else if(indovina
{
verifica='
write(p2[1],&verifica,sizeof(verifica));
}
else
{
verifica='>';
write(p2[1],&verifica,sizeof(verifica));
}
}
}
else //primo processo
{
usleep(5001000);
verifica='>';
while(verifica!='=')
{
printf("\n");
printf("Inserisci il numero: ");
scanf("%d",&indovina);
write(p[1],&indovina,sizeof(indovina));
read(p2[0],&verifica,sizeof(verifica));
printf("%c",verifica);
}
}
}
return 0;
}
Domande da interrogazione
- Qual è lo scopo principale del programma presentato nel codice?
- Come avviene la comunicazione tra i processi nel programma?
- Qual è il ruolo del processo che genera numeri casuali nel programma?
Il programma è progettato per creare un gioco di indovinelli tra processi, dove un processo genera un numero casuale e l'altro tenta di indovinarlo, comunicando tramite pipe.
La comunicazione tra i processi avviene tramite l'uso di pipe, che permettono lo scambio di dati tra i processi figlio e padre per gestire il flusso del gioco.
Il processo che genera numeri casuali attende un segnale per generare un nuovo numero e confronta i tentativi di indovinare del secondo processo, inviando un feedback tramite pipe.