Esta es la página dedicada a entender qué pide este proyecto, qué debe hacer nuestro programa. Dedicada a entender el subject del proyecto, en otras palabras.

Se trata de crear un programa de intercambio de datos utilizando señales UNIX.

Se trata de crear un programa de comunicación en forma de cliente - servidor en el que:

El servidor se lance primero y muestre su PID tras lanzarse.

El cliente tenga dos parámetros: el PID del servidor y la string que deberá mandar al servidor

El cliente debe mandar la string al servidor y este debe mostrarla con cierta rapidez. 1 segundo para mostrar 100 caracteres es ¡muchíiiiisimo!

La comunicación entre client y server SOLO puede darse utilizando señales UNIX, concretamente las señales SIGUSR1 y SIGUSR2

El servidor debe poder recibir strings de distintos clientes consecutivamente, sin necesidad de reiniciar.

Hay que tener en cuenta que linux no pone en cola señales cuando ya se tienen señales pendientes de este tipo

client y server son dos ejecutables, es decir, dos programas.

Si quisiéramos hacer también el BONUS:

El servidor confirma cada señal recibida mandando una señal al cliente.

Soporta los caracteres Unicode.

Para la realización de este proyecto, se permite usar nuestra librería, así como nuestro printf, se permite una variable global por programa (una para client y otra para server), y están permitidas además estás funciones:

◦ write ◦ signal ◦ sigemptyset ◦ sigaddset ◦ sigaction ◦ kill ◦ getpid ◦ malloc ◦ free ◦ pause ◦ sleep ◦ usleep ◦ exit

Mandar información bit por bit:

Ahora bien, no es tan fácil como que el cliente mande una string al servidor y este la muestre, ya que al utilizar señales UNIX, hay que mandar esa string bit por bit, hay que mandar los 8 bits que conforman un carácter en ASCII, carácter a carácter. Se trata de que el cliente mande tantos 1 y 0 como sean necesarios para escribir una string. Cuando el servidor haya recibido 8 bits (1 byte) escribirá un carácter, cuando el servidor haya recibido 8 bits (1 byte) volverá a escribir otro carácter, etc. Así hasta mostrar la string. **El servidor imprimirá la string que le manda el cliente carácter a carácter, aunque lo hará tan rápido que a nosotros nos parecerá que lo hace a la vez. Las señales UNIX solo se pueden mandar una a una, si se mandan a la vez, se pierden o no se gestionan bien. Por tanto, hay que mandar esas señales muy rápido para que se gestionen cada una en su propio tiempo, pero reduciendo al máximo el tiempo que pasa entre que se manda una y se manda la otra. En este sentido nos ayudará la función usleep. Esta función nos permite pausar un proceso durante microsegundos.