Ingeniería del Software. Sept 07 Nombre - ELAI-UPM

Transcripción

Ingeniería del Software. Sept 07 Nombre - ELAI-UPM
Ingeniería del Software. Sept 07
Nombre:
Nº de matrícula:
Ejercicio 3 (20 minutos) 2 puntos
Realizar un programa con 3 hilos corriendo continuamente:
-
El hilo principal le dira al usuario que pulse una tecla cualquiera para terminar el
programa.
Un primer hilo secundario se encarga de ir mostrando cada segundo el numero de
veces que ha ejecutado el otro hilo secundario.
El segundo hilo secundario entra en un bucle infinito que llama a una funcion
ficticia denominada
int control();
Nota: Los hilos deben de terminar de forma ordenada, saliendo de sus bucles correspondientes
antes de terminar.
Ingeniería del Software. Sept 07
Nombre:
Nº de matrícula:
SOLUCION:
int continuar=1;
int contador=0;
void* Hilo1(void* d)
{
while(continuar)
{
control();
contador++;
}
}
void* Hilo2(void* d)
{
while(continuar)
{
sleep(1);
printf(“El otro hilo ha ejecutado %d veces\n”,contador);
}
}
void main(void)
{
pthread_t th1,th2;
int dummy;
pthread_create(&th1,NULL,Hilo1,NULL);
pthread_create(&th2,NULL,Hilo2,NULL);
printf(“Pulsa una tecla\n”);
scanf(“%d”,&dummy);
continuar=0;
pthread_join(th1,NULL);
pthread_join(th2,NULL);
}
Ingeniería del Software. Sept 07
Nombre:
Nº de matrícula:
Ejercicio 4 (15 minutos) 2 puntos
Realizar un programa cliente que se conecta a un servidor de sockets (con comunicación en
forma de streams) ya existente en el Instituto Nacional de Meteorología en la dirección IP
123.123.123.123 en el puerto 3456 y que proporciona la predicción meteorológica en forma
de una cadena de texto no mayor de 2000 caracteres cuando se le envía la cadena
“PREDICCION”. Dicho programa mostrara cuando se ejecute la predicción y terminara a
continuación.
SOLUCION:
int main(void)
{
struct sockaddr_in server_addr;
struct hostent* hosten;
int s=socket(PF_INET,SOCK_STREAM,0);
hosten=gethostbyname("123.123.123.123");
memset(&server_addr,0,sizeof(server_addr));
server_addr.sin_family=AF_INET;
memcpy(&(server_addr.sin_addr),hosten->h_addr,hosten->h_length);
server_addr.sin_port=htons(3456);
if(0!=connect(s,(struct sockaddr*)&server_addr,sizeof(server_addr)))
{
printf("Error en connect %s\n",strerror(errno));
return;
}
char cad[20],respuesta[2000];
sprintf(cad,”PREDICCION”);
int ret=write(s,cad,strlen(cad));
read(s,respuesta,2000);
printf(“Prediccion: %s\n”,respuesta);
close(s);
return 1;
}
Ingeniería del Software. Sept 07
Nombre:
Nº de matrícula:

Documentos relacionados