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

Problema con pipes

Estas en el tema de Problema con pipes en el foro de C/C++ en Foros del Web. ¡Hola! Tengo un problema con un código en C. El ejercicio consiste en crear una comunicación bidireccional padre-hijo mediante tuberías sin nombre. El objetivo es ...
  #1 (permalink)  
Antiguo 05/05/2015, 12:28
 
Fecha de Ingreso: mayo-2015
Mensajes: 1
Antigüedad: 8 años, 11 meses
Puntos: 0
Problema con pipes

¡Hola! Tengo un problema con un código en C. El ejercicio consiste en crear una comunicación bidireccional padre-hijo mediante tuberías sin nombre. El objetivo es que padre e hijo vayan enviándose mensajes (el hijo por una tubería y el padre por otra) hasta que se alcance un número de mensajes concretos, o bien hasta que el usuario introduzca por teclado una palabra que indique que se finaliza el intercambio de mensajes, por ejemplo "FIN" (las dos opciones son perfectamente válidas).

A continuación está mi código, el cual no genera errores al compilar, pero únicamente consigo que el padre envíe un mensaje al hijo, ¿alguien podría ayudarme a ver el fallo y ofrecerme alguna solución?

#include <stdio.h>
#include <fcntl.h>
#include <sys/types.h>
#include <unistd.h>
#define TAMANYO 512

int main(int argc, int argv)
{
pid_t pid;
size_t strlen();
int tuberia1[2], tuberia2[2], bytesleidos, i;
char datos[TAMANYO];
pipe(tuberia1);
pipe(tuberia2);

for(i = 0; i < 5; i++)
{
if ((pid = fork()) == 0)
{ //proceso hijo
close(tuberia1[1]); /* cerrar lado de escritura de tuberia1 */
close(tuberia2[0]); /* cerrar lado de lectura de tuberia2 */
while((bytesleidos = read(tuberia1[0], datos, TAMANYO)) > 0)
write(1, datos, bytesleidos);
close(tuberia1[0]); /* cerrar lado de lectura de tuberia1 */
sprintf(datos, "Hola, yo soy tu hijo escribiendo por tuberia1. Iteracion: %d\n", i);
write(tuberia1[1], datos, strlen(datos));
close(tuberia1[1]);
}
else
{ //proceso padre
close(tuberia1[0]); /* cerrar lado de lectura de tuberia1*/
close(tuberia2[1]); /* cerrar lado de escritura de tuberia2*/
sprintf(datos, "Hola, yo soy tu padre escribiendo por tuberia2. Iteracion: %d\n", i);
write(tuberia1[1], datos, strlen(datos));
close(tuberia1[1]);
while((bytesleidos = read(tuberia2[0], datos, TAMANYO)) > 0 )
write(1, datos, bytesleidos);
close(tuberia2[0]);
}
}
waitpid(pid, NULL, 0);
return 0;
}

Etiquetas: char, int
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 17:19.