La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Date | Place Bloques de Recuperación Práctica I-Ejercicio 2.

Presentaciones similares


Presentación del tema: "Date | Place Bloques de Recuperación Práctica I-Ejercicio 2."— Transcripción de la presentación:

1 Date | Place Bloques de Recuperación Práctica I-Ejercicio 2

2 Name | Company Saltos en el tiempo Las funciones sigsetjmp y siglongjmp, permiten a un proceso volver a un estado anterior. Es similar a un GOTO. La idea es la siguiente :Si vamos a realizar una función, la cual pude producir algún tipo de señal no deseada, lo que debemos hacer es lo siguiente: –1º Salvar el estado de la ejecución (sigsetjmp) –2º Llamar a la función –3º Si se ha producido alguna señal no deseada, volver a tras en el tiempo (siglongjmp), para recuperar, el estado de la ejecución, que habíamos guardado en el paso 1º, y seguir con el programa.

3 Name | Company Salvar el estado: sigsetjmp int sigsetjmp(jmp_buf env, 1); Esta función guarda el estado de la ejecución en la variable env, de tipo jmp buf. La función sigsetjmp, devuelve 0, cuando se invoca por primera vez, y no cero (el valor colocado en el parámetro val que envía la función siglongjmp(jmp_buf env, int val);) cuando es invocada por segunda vez sigsetjmp Función ¿Señal? printf(“No error\n”); siglongjmp Ha salvado el estado y devuelve 0 Va hacia atrás SOLO para recuperar el estado salvado en el 1º paso, y la función sigsetjmp devuelve algo distinto de 0 NO SI

4 Name | Company Recuperar el estado: siglongjmp void siglongjmp(jmp_buf env, int val); Esta función lo que hace es ejecutar por segunda vez a la función sigsetjmp, y consigue tener en la variable env de tipo jmp_buf, el valor que habíamos guardado cuando ejecutamos la primera vez sigsetjmp. Además, ahora, al ejecutar por segunda vez, la función sigsetjmp, esta devuelve el valor que le ha enviado siglongjmp en su segundo paramento Ejemplo static jmp_buf env; if(sigsetjmp(env,1)==0) {/* La he ejecutado la primera vez */ funcion();/*Llama a una función*/ siglongjmp(env,1);/*Obligo a ir a tras en el tiempo*/ }else { /* he ejecutado sigsetjmp por segunda vez, porque la ha llamado siglongjmp y nos ha devuelto un 1 */….. }

5 Name | Company Bloques de recuperación I Los bloques de recuperación se componen en dos partes: –Detención del fallo –Recuperación de fallo

6 Name | Company Detención del fallo La detención del fallo, en nuestro caso, es detectar si se ha producido una serie de señales. Es decir, tendremos que capturar algunas señales en caso de que se produzcan, y darles un tratamiento especial, ejecutando una subrutina, que se encargue de modificar el valor de una variable en concreto. Para saber si se ha producido esas señales, solo tendremos que ver si se ha producido una modificación en esa variable.

7 Name | Company Recuperación del fallo Para la recuperación del fallo, simplemente, tendremos que ir a tras en el tiempo, y recuperar el estado del la ejecución del programa, antes de que se produjesen las señales.


Descargar ppt "Date | Place Bloques de Recuperación Práctica I-Ejercicio 2."

Presentaciones similares


Anuncios Google