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

Semaforo

Estas en el tema de Semaforo en el foro de C/C++ en Foros del Web. Buenas amigos, os escribo porque tengo un problema que no soy capaz de solucionar, necesito que un proceso padre y un proceso hijo se comuniquen ...
  #1 (permalink)  
Antiguo 13/06/2010, 11:27
Avatar de VelascoCalderon  
Fecha de Ingreso: agosto-2007
Mensajes: 80
Antigüedad: 16 años, 8 meses
Puntos: 0
Semaforo

Buenas amigos, os escribo porque tengo un problema que no soy capaz de solucionar, necesito que un proceso padre y un proceso hijo se comuniquen entre si, como un dialogo entre ellos, pero no hay forma, programo y primero se ejecuta todo lo del padre y luego todo lo del hijo. En teoria con semaforos se solucionaria este problema, pero no tengo ni idea de como usarlos ni encuentro un ejemplo claro. Si alguien mi pudise ayudar lo agradecira muchisimo.


Un saludo!!
  #2 (permalink)  
Antiguo 13/06/2010, 12:03
Avatar de VelascoCalderon  
Fecha de Ingreso: agosto-2007
Mensajes: 80
Antigüedad: 16 años, 8 meses
Puntos: 0
Respuesta: Semaforo

En definitiva algo asi, pero que alternen ESCRIBE PADRE, LEE HIJO, ESCRIBE HIJO, LEE PADRE, ESCRIBE PADRE, LEE HIJO, ESCRIBE HIJO...


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


#define LEER 0
#define ESCRIBIR 1

int main ()
{
int descr[2],i;
int bytesleidos;
char mensaje[100],
*frase="HIJO";
char mensaje2[100],
*frase2="PADRE";
printf ("Ejemplon");
pipe (descr);

for (i=0;i<5;i++)
{
if (fork () == 0)
{

write (descr[ESCRIBIR], frase, strlen(frase));
close (descr[ESCRIBIR]);
bytesleidos = read (descr[LEER], mensaje, 100);
printf ("Bytes leidos: %d\n",bytesleidos);
printf ("Mensaje: %s\n", mensaje);
close (descr[LEER]);
}
else
{

write (descr[ESCRIBIR], frase2, strlen(frase2));
close (descr[ESCRIBIR]);
bytesleidos = read (descr[LEER], mensaje2, 100);
printf ("Bytes leidos: %d\n",bytesleidos);
printf ("Mensaje: %s\n", mensaje2);
close (descr[LEER]);
}
}
}

Etiquetas: Ninguno
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 09:33.