Las comunicaciones se establecerán a través de algún mecanismo de comunicación entre procesos, que ustedes habrán de elegir. No obstante, la interfaz de comunicaciones será impuesta, tal y como se define en este documento.
Básicamente, se tienen sendas estructuras para que el cliente o el servidor envíen mensajes, así como dos parejas de funciones de envío y recepción de peticiones y respuestas.
Las estructuras de datos empleadas serán las siguientes:
/* Constantes */ #define DIM_ORDEN 200 /* Long. máxima de la orden */ #define DIM_CANAL 128 /* Long. máx. nombre de tty */ #define FINALIZA 7 /* Código de finalización */ /* Códigos de error */ typedef enum { ERR_OK = 0, ERR_HIJO = 1000, ERR_CARGA = 2000, ERR_EJEC = 3000 } Codigo_error; /* Estructuras para peticiones y respuestas */ struct Peticion { char orden[DIM_ORDEN]; /* orden para ejecutar */ char canal[DIM_CANAL]; /* fichero donde se visualiza */ }; struct Respuesta { Codigo_error resultado; };
El cliente enviará al servidor una petición con la estructura
struct Peticion
. El campo orden
contendrá la orden completa. En caso de una orden de finalizar, el campo
orden[0]
tendrá el valor 7 (constante
FINALIZA
). El campo canal
es una cadena
de caracteres donde se guarda la ruta de la terminal del cliente.
Las funciones para efectuar las comunicaciones han de tener estos prototipos:
/* Funciones de comunicación para el cliente */ int envia_peticion ( const struct Peticion* ); int espera_respuesta ( struct Respuesta* ); /* Funciones de comunicación para el servidor */ int recibe_peticion ( struct Peticion* ); int envia_respuesta ( const struct Respuesta* );
Estas cuatro funciones devuelven un número entero, cuyo significado se describe a continuación:
Valor
|
Significado
|
0
|
La
operación se completó satisfactoriamente
|
1
|
El
servidor ha finalizado antes de tramitar la orden (en las funciones propias del
cliente)
|
-1
|
Hubo
algún error
|
Las estructuras y prototipos de funciones que conforman la interfaz de
comunicaciones están ya definidas en el archivo
/prac/cliser/comunicacion.h