- Esempio di utilizzo di fork() per creare
processi figli - |
|||
COSA SERVE PER QUESTO TUTORIAL | |||
Download | Chiedi sul FORUM | Glossario | Un compilatore C, conoscenze basiche di C (in particolare allocazione dinamica di array). | ||
Come creare un numero non noto a compilazione di processi figli tramite fork() | |||
CODICE SORGENTE #include <stdio.h> /* printf() */ #include <unistd.h> /* fork(), getpid() */ #include <stdlib.h> /* malloc(), exit() */ #include <sys/types.h> /* pid_t */ #include <sys/wait.h> /* wait() */ int main(int argc, char *argv[]) { int n, c1, res; pid_t *figli, corrente; /* * Chiediamo all'utente quanti processi * vuole forkare. */ printf("Quanti processi vuoi creare? "); scanf("%d", &n); /* * Allochiamo dinamicamente lo spazio necessario * per contenere gli ID dei processi che creeremo */ figli = malloc(sizeof(int)*n); /* * Forkiamo n volte nel processo padre e facciamo * terminare il ciclo subito se si tratta del figlio * (ovvero se il risultato dell'ultima fork e' 0) */ for(c1=0;c1<n && (c1==0 || figli[c1-1]!=0);c1++) figli[c1] = fork(); /* * Prendiamo l'ID del processo corrente */ corrente = getpid(); if(figli[c1-1]!=0) { /* * Il padre attende la terminazione dei figli */ printf("Padre (%d) - Attendo la terminazione di tutti i figli.\n", corrente); wait(&res); printf("Padre (%d) - Tutti i figli sono terminati.\n", corrente); } else { /* * I figli stampano un messaggio notificando la * propria esecuzione */ printf("Figlio (%d) - Sono in esecuzione.\n", corrente); /* * Il figlio termina con esito positivo */ exit(0); } return 0; } |
|||
<< INDIETRO | by VeNoM00 |