fork no finaliza correctamente

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
xitowebster
Forista Nuevo
Forista Nuevo
Mensajes: 1
Registrado: Mié Oct 17, 2012 9:03 pm

fork no finaliza correctamente

Mensaje por xitowebster » Mié Oct 17, 2012 10:23 pm

Imagen

Uploaded with ImageShack.us

Hola estimados.

Tengo un problema al representar lo que sale en la imagen a partir de un código fork en C.
El problema es que replico desde el padre hacia la derecha ( como sale en la imagen) y luego desde cada nodo padre envío mensaje hacia el hijo pero esta ejecución no finaliza y queda tal cual un ciclo infinito.

No entiendo por que sucede esto pero creo que puede ser porque finaliza primero el padre antes que sus hijos.

De toda formas dejare el código aqui.

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

int main( int _argc, char** _argv)
{
pid_t pid;

//lectura:0;escribir:1

int i,j;

int ** matriz;
printf( "Pid padre: %d\n",getpid());
matriz=(int**)malloc(sizeof(int*)*6);

for(i=0;i<6;i++)
matriz=(int*)malloc(sizeof(int)*2);

pipe(matriz[0]);
pipe(matriz[1]);

pid=fork();

///////EJECUCIÓN HIJO DERECHO.
if(pid==0){

//////Mensajes entre padre principal e hijo derecho

close(matriz[1][1]);
close(matriz[0][0]);

char buffer[128];
char msg[128];
read( matriz[1][0], msg, 128 );
printf( "Hijo=%s\n",msg );


///////////////////////////////////////////////////////

////EJECUCION DE LAS REPLICACIONES DEL HIJO DERECHO
for(j=2;j<6;j=j+2){

pipe(matriz[j]);
pipe(matriz[j+1]);

pid=fork();

if(pid==0){

close(matriz[j+1][1]);
close(matriz[j][0]);
char buffer[128];
char msg[128];
read( matriz[j+1][0], msg, 128 );
printf( "Hijo2=%s\n",msg );



}else{

///////POR LO TANTO ESTE ES EL HIJO DERECHO

close(matriz[j][1]);
close(matriz[j+1][0]);
char buffer[128];
char msg[128];
sprintf( buffer, "hola pos mijo derecho nº%d: %d",j,pid );
write( matriz[j+1][1], buffer, strlen(buffer)+1 );

break;
}

}


}else{
close(matriz[0][1]);
close(matriz[1][0]);

char buffer[128];
sprintf( buffer, "hola pos mijo derecho" );
char msg[128];

//read( p1[0], msg, 128 );
write( matriz[1][1], buffer, strlen(buffer)+1 );
waitpid(pid);
//printf( "Padre=%s\n", msg );

}

free(matriz);
printf( "Pid terminando: %d\n",getpid());
exit(0);

}





También he leído que se deben utilizar "wait" para que esta ejecución se en el orden que se necesita pero eso es lo que no he podido lograr.
Espero puedan ayudarme.

SALUDOS!
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje