Salve, vorrei avere un aiuto su come svolgere questo programma in C:
Creare un array di 3 elementi
Chiedere all'utente di inserire un numero.
Generare 3 processi.
Ogni processo deve moltiplicare un elemento dell'array per il numero inserito dall'utente.
Al termine, il processo padre deve sommare il risultato dei processi figli e stamparlo.
io ho provato e a me viene così:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
int main(void) {
pid_t pid, pidwait; //definisco, salvo la variabile pid di tipo pid_t
int status;
int array [3] = {1, 2, 3};
int a,b;
int numero_processi=0;
int sum=0;
printf("inserisci un numero\n");
scanf("%d", &a);
while(numero_processi <3){
pid=fork(); //si riferisce sempre al padre, perchè di volta in volta i processi figli terminano e il loro pid viene cancellato
if (pid<0){
printf("ERRORE NELLA FORK");
}
else if (pid == 0){
//figlio
b=array[numero_processi]*a;
sum=sum+b;
printf("sono nel figlio:%d e la somma vale :%d\n",getpid(),sum);
exit(0);
}
else{
//padre
wait(NULL);
numero_processi++;
printf("sono il processo padre:%d e il valore somma e':%d\n", getpid(), sum);
}
}
return 0;
}
ma mi stampa questo:
inserisci un numero
5
sono nel figlio:146 e la somma vale :5
sono il processo padre:133 e il valore somma e':0
sono nel figlio:147 e la somma vale :10
sono il processo padre:133 e il valore somma e':0
sono nel figlio:148 e la somma vale :15
sono il processo padre:133 e il valore somma e':0
quando in realtà dovrebbe stamparmi il valore della somma, per il resto è giusto