07/04/16

Recuperare il valore di ritorno di un processo figlio

Uso di exit() , e  della macro  WEXITSTATUS  per catturare il valore di ritorno di un processo figlio quando termina .


questo programma crea N processi figli in parallelo, ogni figlio calcola per conto suo la potenza: 2 alla i-esima iterazione, questo può essere utile per esempio per calcolare la sommatoria delle potenze di 2.  

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define N 5


//questo programma crea N processi figli in paralello.
//ogni processo figlio creato fa una cosa e fa la exit.

int result;
int main ()
{
    int status, pid, i,  sum = 0;
    for (i = 0; i < N; i++)
    {   
         pid = fork();
         if (pid == 0){
             printf("Step %d:", i);
             result = power(2, i);
             printf("The partial result is: %d\n", result );
             exit(result);
         }

        wait(&status);
        printf("Valore di ritorno del figlio: = %d \n", WEXITSTATUS(status));

    }

}
Modifichiamo il programma per  calcolare appunto la sommatoria delle  N prime potenze di 2, 



#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define N 5




int result;
int main ()
{
    int status, pid, i,  sum = 0;
    for (i = 0; i <= N; i++)
    {   
         pid = fork();
         if (pid == 0){
             printf("Step %d:", i);
             result = power(2, i);
             printf("The partial result is: %d\n", result );
             exit(result);
         }//end if

        wait(&status);

        sum = sum + WEXITSTATUS(status);
    }//end for 
    printf("the sum is: %d \n", sum);

}

int power(int b, int e)
{ 
    int result =1;
    int i;

    for (i =1; i<=e; i++)
    result=result*b;
    return result;

}

Nessun commento:

Posta un commento