Capítulo 6. Programación del tratamiento de señales 6.1. Objetivos

Anuncio
Capítulo 6. Programación del tratamiento de
señales
6.1. Objetivos
Entender la programación con señales de de unix.
6.2. Documentación de las transparencias
Las transparencias relevantes para realizar esta práctica son:
- Páginas 19-35 de las transparencias de C
- Páginas 1-11 de las transparencias de Bibliotecas de C y llamadas al sistema
6.3. Señales en la interfaz de programación de Unix
Compile el programa psignal.c:
#include <unistd.h>
#include <stdlib.h>
#include <signal.h>
#define VUELTAS 10000000000LL
void confirmar(int sig) {
char resp[100];
write(1, "Quiere terminar? (s/n):", 24);
read(0, resp, 100);
if (resp[0]==’s’) exit(0);
}
int main(void) {
long long int i;
signal(SIGINT, SIG_IGN);
write(1, "No hago caso a CONTROL-C\n", 25);
for (i=0; i<VUELTAS; i++);
signal(SIGINT, SIG_DFL);
write(1, "Ya hago caso a CONTROL-C\n", 25);
for (i=0; i<VUELTAS; i++);
signal(SIGINT, confirmar);
write(1, "Ahora lo que digas\n", 19);
for (i=0; i<VUELTAS; i++);
exit(0);
}
y ejecútelo, intentando abortarlo en varios momentos con CONTROL-C. Si los tiempos de los
bucles son demasiado cortos o demasiado largos, ajuste el contador de los bucles1.
1
Capítulo 6. Programación del tratamiento de señales
Ejecútelo en una ventana y mándele la señal de interrupción desde otro terminal (con kill -SIGINT
proceso) para ver que el comportamiento es equivalente 2.
Modifíquelo para que si se le manda la señal de terminar (SIGTERM) escriba el mensaje "No
quiero terminar" y continúe por donde iba.
6.4. Ficheros ofrecidos
En el directorio signal:
• psignal.c.
•
El ejecutable de la modificación pedida: psignal2.
6.5. Resultados pedidos
•
Explicación del comportamiento del programa psignal.c.
•
La modificación pedida: psignal2.c.
Notas
1. Como estamos al límite de la capacidad de los enteros, para alargar el bucle utilizamos un long
long int. Tenga en cuenta que en C, las constantes de ese tipo llevan el sufijo LL, como en
1000000000000000000LL.
2. Puede ver desde otra ventana todos los procesos ligados a cualquier perminal con ps u.
2
Descargar