This commit is contained in:
blackilykat 2024-12-09 17:24:13 +01:00
parent 496784c375
commit 474751df6a

32
doc.c
View File

@ -7,25 +7,25 @@ bhoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
#include <stdlib.h> //rand, exit #include <stdlib.h> //rand, exit
#include <unistd.h> //fork, getpid, getppid, sleep #include <unistd.h> //fork, getpid, getppid, sleep
#define DIM 30
#define MAX_NUMERO 20
int main(int argc, char* argv[]) //argv=[fork_multipli,6] int main(int argc, char* argv[]) //argv=[fork_multipli,6]
{ {
int i, num_figli=3, v[30], c, d, s=0; int i, num_figli=3, v[DIM], c, d, s=0;
if (argc>1) if (argc>1)
num_figli = atoi(argv[1]); num_figli = atoi(argv[1]);
else
{
printf ("i figli sono : %d, \n", num_figli); printf ("i figli sono : %d, \n", num_figli);
for(i=0; i<30; i++) for(i=0; i<DIM; i++)
{ {
v[i]=rand() % 20; v[i]=rand() % MAX_NUMERO;
printf ("%d-", v[i]); printf ("%d-", v[i]);
} }
d=30/num_figli; d=DIM/num_figli;
printf ("\nInserisci il numero da cercare: "); printf ("\nInserisci il numero da cercare: ");
scanf("%d", &c); scanf("%d", &c);
printf ("\n numero da trovare: %d\n", c); printf ("\n numero da trovare: %d\n", c);
}
pid_t pid[num_figli]; pid_t pid[num_figli];
for(i=0; i<num_figli; i++) for(i=0; i<num_figli; i++)
@ -35,20 +35,26 @@ int main(int argc, char* argv[]) //argv=[fork_multipli,6]
perror("Errore nella fork().\n"); perror("Errore nella fork().\n");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
if(pid[i]== 0) if(pid[i]== 0) {
for(s=0; s<d; s++){ // hai già impostato s, non deve tornare a 0 con ogni ciclo
for(; s<d; s++){
if(v[s]==c){ if(v[s]==c){
printf("%d figlio di %d: ha trovato %d, all'indice %d.\n il figlio è %d", getpid(), getppid(), c, s, i); printf("%d figlio di %d: ha trovato %d, all'indice %d. il figlio e' il numero %d\n", getpid(), getppid(), c, s, i);
exit(EXIT_SUCCESS); exit(s);
} }
} }
exit(EXIT_FAILURE);
}
s=s+10; s=s+10;
d=d+10; d=d+10;
} }
//riprendo a gestire il flusso del padre //riprendo a gestire il flusso del padre
int x; int x;
wait; do {
printf("consegnato"); wait(&x);
x = WEXITSTATUS(x);
} while(x == EXIT_FAILURE);
printf("consegnato ad indice %d\n", x);
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }