Ok, es comprensible. No suelo hacer esto pero es la desesperación, llevo todo el verano dándole vueltas y...en fin!! no saco nada en claro.
En los siguientes trozos de código no soy capaz de implementar pipes sustituyendo a los buzones:
==============================================================
1)
printf("\n\t ---------------ENVIO DE MENSAJES(Jugador)---------------");
printf("\n\tSe envia al jugador %d \ttipo%d\tvalor%d\tapuesta%d\n",getpid(),jugador_enviado.tipo,jugador_enviado.valor,jugador_enviado.apuesta);
if(msgsnd(buzon, &jugador_enviado, sizeof (MENSAJE) - sizeof (long), 0)==-1)
{
printf("Error en la escritura del mensaje\n");
}
printf("\nApuesta enviada\n");
if((msgrcv(buzon, &jugador_enviado, sizeof (MENSAJE) - sizeof (long), OK,0)==-1))
{
printf("Error al recibir el mensaje");
}
else
{
printf("\nRebido mensaje de fin de programa(jugador)\n\tOk,el jugador %d termina\n",jugador_enviado.origen);
exit(33);
}
===============================================================
2)
if(buzon= msgget(llave, 0600 | IPC_CREAT)==-1) //Devuelve identificador de la cola
{
printf("\n\tError al crear el buzon");
}
===============================================================
3)
//Cierre del semaforo, inicializacion de la zona de memoria y apertura del semaforo.
(*estructura_semaforo).sem_num= 0;
(*estructura_semaforo).sem_op= -1;
(*estructura_semaforo).sem_flg= 0;
semop (semaforo, estructura_semaforo, 1);
for (i=0; i<num_jugadores; i++)
{
jugador_apuesta[i].apuesta= -1;
jugador_apuestas[i].id_jugador=0;
}
(*estructura_semaforo).sem_op= 1;
semop (semaforo, estructura_semaforo, 1);
pid_padre=getpid();
for (i=0; (i<numerojugadores && pid_padre==getpid()); i++)
{
//Creacion de hijosfork()
pid=fork();
if(pid==0)
{
printf("\n\t\t----------ARBITRO----------");
printf("\nCreacion de hijos->iteracion del for:%d",i);
printf("\npid del hijo:%d",getpid());
printf("\npid del padre:%d",pid_padre);
apuesta(buzon,valor_max,memoria_compartida);
}else
{
if((msgrcv(buzon, &jugador[i], sizeof (MENSAJE) - sizeof (long), APUESTAS,0)==-1))
{
printf("Error al recibir el mensaje");
}
printf("\n\t----------RECEPCION DE APUESTAS(Arbitro)----------");
printf("\nRecibido un jugador");
}
}
if(pid_padre==getpid())
{
for (i=0; (i<numerojugadores && pid_padre==getpid()); i++)
{
apuesta_ganadora=jugador[i].valor + apuesta_ganadora;
}
printf("\nLa suma de los valores de los jugadores es: %d\n",apuesta_ganadora);
(*estructura_semaforo).sem_op= 1;
semop (semaforo, estructura_semaforo, 1);
for (i=0; (i<numerojugadores); i++)
{
if(jugador_apuestas[i].apuesta==apuesta_ganadora)
{
ganador=1;
printf("\tEl ganador es el jugador %d\n",jugador[i].id_jugador);
}
}
if(ganador==0)
{
printf("\n\tNo existe el ganador\n");
}
for (i=0; (i<numerojugadores); i++)
{
jugador_enviado.origen=jugador[i].id_jugador;
jugador_enviado.destino=OK;
if(msgsnd(buzon, &jugador_enviado, sizeof (MENSAJE) - sizeof (long), 0)==-1)
{
printf("Error en la escritura del mensaje\n");
}
}
(*estructura_semaforo).sem_op= 1;
semop (semaforo, estructura_semaforo, 1);
}
}
}
================================================================
También me interesaría conocerla forma de declarar las pipes o tuberías.
Si alguien me pudiese echar una mano le estaría muyyyyyyyy agradecido...
Muchas gracias a tod@s!!!