3.310 cursos gratis
6.277.261 alumnos
Publica tu curso gratis
Busca cursos gratis:
Estás aquí: mailxmail > Cursos de Informática > Programación > Procesos en C. Sincronización (primera parte) > Procesos en C. Otras funciones (segunda parte)

Procesos en C. Sincronización (primera parte)

Autor: Editorial McGraw-Hill
Curso: 5/5 5/5 (1 opinión) |1059 alumnos|Fecha publicación: 21/10/2008

Capítulo 16:

 Procesos en C. Otras funciones (segunda parte)

Al ser llamada, la función setjmp guarda en una variable el entorno de pila. La definición de setjmp es:

include <setjmp.h>
int setjmp (jmp_buf env);


donde env es la variable donde se guarda el entorno de pila. El tipo jmp_buf se define en <setjmp.h>. El valor retornado es 0 la primera vez que se llama a la función.

Cuando se llama a la función longjmp, el programa salta a la línea donde se encuentra setjmp. Su definición es:

include <setjmp.h>
void longjmp (jmp_buf env, int val);


donde env es la variable donde se guardó el entorno de pila con setjmp, y val, el valor que retornará setjmp cuando el flujo de la ejecución salte desde longjmp a setjmp. Es decir, con una llamada a setjmp, el programador marca el punto al que saltará el flujo de ejecución, cuando se ejecute longjmp. Mientras se esté ejecutando el flujo normal del programa, setjmp devolverá el valor 0, y cuando se salte hasta setjmp haciendo uso de longjmp,el valor de retorno de la función será el especificado en longjmp en la variable val. La variable de entorno de pila sirve, en el flujo normal del programa, para restaurar el proceso al estado en el que se encontraba la última vez que se ejecutó setjmp.

El uso de estas dos funciones no está limitado a la gestión de señales, pero es aquí donde su empleo es más frecuente. Mediante setjmp se fija el punto del programa al que se desea volver después de recibir una señal. La función que gestiona la señal utiliza longjmp para permitir que, una vez gestionada la señal, el proceso continúe en un punto prefijado por el programador mediante setjmp.

Existe un problema cuando se llama a longjmp: la máscara de señales que se restaura en el punto al que se salta definido por setjmp es distinta de la máscara de señales que existía en el momento en que setjmp fue invocada. Evidentemente, en la variable de entorno se ha almacenado la información necesaria para que el proceso se siga ejecutando desde ese punto, pero esa variable de entorno no almacena la máscara definida para las señales.

Cuando se captura una señal, la función que lo consigue comienza a ejecutarse automáticamente en cuanto ésta llega. Como se ha visto, al comienzo de la rutina, se desactiva la señal que se está tratando, para evitar la ejecución de la acción por defecto, que puede romper la propia ejecución. Para evitar responder a la señal correspondiente, la rutina añade la señal a la máscara de señales del proceso, lo que previene sobre apariciones de una señal procedente de la interrupción del gestor de señales. Esta nueva máscara es la que existe en el punto definido por setjmp, que no es la misma que estaba definida cuando se llamó a la sentencia setjmp. Para evitar este efecto indeseable se utilizan las funciones:

include <setjmp.h>
int sigsetjmp (sigjmp_buf env, int savemask);
void siglongjmp (sigjmp_buf env, int val);


donde la única variación respecto a lo comentado es la variable savemask, que, si tiene un valor no nulo, forzará a sigsetjmp a salvar la máscara de señales para, posteriormente, ser restaurada cuando el flujo del programa salte hasta sigsetjmp mediante una llamada a siglongjmp.

El uso de estas funciones dota al desarrollo de programas de otras funciones que los hacen más robustos frente a posibles errores en la ejecución. El programa debe, en primer lugar, instalar la rutina de tratamiento y, posteriormente, definir el punto en donde se va a producir el salto.

Nota: Con este capítulo hemos llegado al final del curso. Recuerda que este trabajo es un fragmento del libro "CEO - Desarrollo de funciones en el sistema informático" del autor J. M. Molina, F. Chamorro,publicado por la editorial McGraw-Hill (ISBN: 84-481-4877-0).

Recibe nuestras novedades
Al presionar "Recibir" estás dándote de alta y aceptas las condiciones legales de mailxmail

Información de los programas con certificado

Hay 1 opinión. Opina sobre este curso.


Cursos similares a Procesos en C. Sincronización (primera parte)


Cursos Valoración Alumnos Vídeo
Bases de Datos en C#
El curso incluye el código necesario para acceder a las bases de datos y realizar consultas de selección y de acción.... [05/04/07]
 3,33/5 5.017  
SQL
SQL (Structured Query Language) es un lenguaje de programación para acceder y manipular bases de datos. SQL surgió de un proyecto de IBM en el que investigaba e... [10/05/04]
 4,49/5 35.402  
Creación de Paginas Web con Html
HTML es el lenguaje básico y muy sencillo que nos permite la creación de Paginas Web. Este curso ha nacido con la intención de complementar los anteriores cursos de JavaS... [26/05/05]
 4,47/5 20.865  


Publicar en   del.icio.us    digg    meneame

¿Qué es mailxmail.com?|ISSN: 1699-4914|Recomiéndanos|Ayuda
Condiciones legales de mailxmail