Unix - Practica en Unix

 
Vista:

Practica en Unix

Publicado por Don Vitto (2 intervenciones) el 30/08/2007 15:37:10
Buenas, necesito ayuda con una práctica en Unix. El tema principal son las tuberías o pipes. Si alguien controla sobre este tema, por favor, que se ponga en contacto conmigo enviandome un e-mail a [email protected]. Graciassss
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Practica en Unix

Publicado por n0str0m0 (262 intervenciones) el 31/08/2007 10:42:01
Aquí no se hacen deberes o prácticas. Pero si pones código o preguntas cosas concretas, te ayudaremos en lo que podamos.

Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Practica en Unix

Publicado por DonVitto (2 intervenciones) el 31/08/2007 16:05:14
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!!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Practica en Unix

Publicado por Tom (178 intervenciones) el 03/09/2007 08:08:57
http://tldp.org/LDP/lpg/node11.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar