Con estos cambios funciona correctamente:
/* Este programa hace que un hijo haga una suma de numeros pasados por parametro para
que posteriormente, cuando el hijo muera, devuelva al programa padre la suma de dichos numeros */
#include <stdio.h>
#include <signal.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <stdlib.h>
main(int argc,char *argv[])
{
int num,estado,error;
switch(fork())
{
case 0:
{
/* El hijo calcula la operación y lo devuelve con el exit() */
printf("HIJO %d %d \n",atoi(argv[1]),atoi(argv[2]));
num=atoi(argv[1]) + atoi(argv[2]);
printf("HIJO %d %d\n",num,(char)num);
exit(num);
}
default:
{
/* El padre recibe con el wait lo devuelto por el hijo en el exit y lo imprime por pantalla */
wait(&estado);
error=WEXITSTATUS(estado);
printf("PADRE %0x %d\n",&estado,estado);
printf("\nPADRE la suma de los hijos es: %d, %d\n",estado/256,error);
printf("PADRE %lu\n",sizeof(estado));
}
}
}
Tienes que usar WEXITSTATUS para obtener el código de error que devuelve el proceso al salir.
Saludos,
Miguel Angel.