Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Comunicación entre procesos(UNIX)

Estas en el tema de Comunicación entre procesos(UNIX) en el foro de C/C++ en Foros del Web. Trás tiempo dedicado a otros menesteres vuelvo con algo de programación y como no, una duda . La cuestión es la siguiente. Creo un programa ...
  #1 (permalink)  
Antiguo 05/02/2007, 15:27
Avatar de yournightmare86  
Fecha de Ingreso: abril-2006
Ubicación: Madrid
Mensajes: 875
Antigüedad: 18 años
Puntos: 9
Comunicación entre procesos(UNIX)

Trás tiempo dedicado a otros menesteres vuelvo con algo de programación y como no, una duda . La cuestión es la siguiente. Creo un programa que le paso como parámetro el número de hijos que se tendrán que crear,(proceso abuelo,padre,hijo,nieto...). El problema está en que cuando termino de crear todos los procesos, el último tiene que ir pasar un testigo a su padre avisando de que ha sido creado con éxito y que está preparado.El padre a su padre y así hasta el primer proceso... La cosa es que ando algo liado y no consigo que el último hijo trás crearse inicie la comunicación hacia arriba... Lueg tengo que mandar la señal SIGUSR1 hacia abajo pero eso de momento no me interesa. Hasta el momento tengo esto, pero le faltan cosas.
Código:
#include<stdio.h>
#include<stdlib.h>
#include<signal.h>

void manejador_ascendente(int,pid_t,int);

main(int argc,char * argv[])
{
 pid_t pid_hijo,pid_patriarca;
 int i,numero_de_hijos;

 if(argc!=2)
 	{
	 printf("\n Numero incorrecto de parametros.");
	 printf("\n Debes pasar solamente un parametro.");
	 return 0;
	}
 if(atoi(argv[1])==0 && strcmp(argv[1],"0"))
 	{
	 printf("\n Has pasado como parametro una cadena.");
	 printf("\n Debes pasar un entero como parametro.");
	 return 0;
	}
 numero_de_hijos = atoi(argv[1]);
	
 pid_patriarca = getpid();
 printf("\n %d",pid_patriarca);

 for(i=0;i<numero_de_hijos;i++)
 	{
    switch(pid_hijo = fork())
    	{
       case -1:
       			perror(" ");
                exit(2);
       case 0:
       			printf("\n Hijo recien creado numero %d con PID = %d y con PID del padre = %d",i+1,getpid(),getppid());
	   			if (i == numero_de_hijos-1) 
					{
   					 printf("\n Proceso %d enviando SIGUSR1 a %d", i+1, getppid());
   					 kill (getppid(), SIGUSR1);
  				    }
	   			break;
       default:
       			while(1);
                pause();
      }
   }
   
   
}

void manejador_ascendente(int sig,pid_t pid_patriarca,int i)
{
 
    if (pid_patriarca != getpid())
      {
        printf("\n Proceso %d Enviando SIGUSR1 a %d", i, getppid());
        kill (getppid(), SIGUSR1);
      }
	else
	  {
 	  }			  
}
Como ven no está completo... alguna sugerencia? Muchas gracias. Saludos.

P.D: El resultado debería ser algo así:
Código:
@ programa 3
Hijo 1 creado.
Hijo 2 creado.
Hijo 3 creado.
Hijo 3 listo.
Hijo 2 listo.
Hijo 1 listo.
Proceso padre listo.

Última edición por yournightmare86; 05/02/2007 a las 15:32
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:45.