signal

El control de la señal de la interrupción de conjuntos.

Nota importanteImportante

No utilice este método para cerrar la aplicación de Tienda Windows, excepto en la prueba o escenarios de depuración.Las maneras mediante programación o de la interfaz de usuario de cerrar una aplicación de Tienda Windows no se permiten según la sección 3,6 de Windows 8 requisitos de la raíz de la aplicación.Para obtener más información, vea Ciclo de vida de la aplicación (aplicaciones de almacén de Windows).

void (__cdecl *signal(
   int sig, 
   void (__cdecl *func ) (int [, int ] ))) 
   (int);

Parámetros

  • sig
    Apunte el valor.

  • func
    Función que se va a ejecutar.El primer parámetro es un valor señalado y el segundo parámetro es un sub- código que se puede utilizar cuando el primer parámetro es SIGFPE.

Valor devuelto

signal devuelve el valor anterior de func asociado a la señal determinada.Por ejemplo, si el valor anterior de func era SIG_IGN, el valor devuelto también es SIG_IGN.Un valor devuelto de SIG_ERR indica un error, en este caso errno se establece en EINVAL.

Vea _doserrno, errno, _sys_errlist, y _sys_nerr para obtener más información sobre esto, y otro, códigos de retorno.

Comentarios

La función de signal permite que un proceso elija una de las maneras de controlar una señal de la interrupción del sistema operativo.El argumento de sig es la interrupción a la que signal responde; debe ser una de las constantes de manifiesto siguientes, definidos en SIGNAL.H.

Valor de sig

Descripción

SIGABRT

Terminación anormal

SIGFPE

Error flotante

SIGILL

Instrucción no válida

SIGINT

Signo de CTRL+C

SIGSEGV

Acceso no válido de almacenamiento

SIGTERM

Solicitud de finalización

Si sig no es uno de los valores anteriores, se invoca el controlador no válido de parámetro, según Validación de parámetros.Si la ejecución puede continuar, conjuntos errno de esta función a EINVAL y devuelven SIG_ERR.

De forma predeterminada, signal finaliza el programa de llamada con el código de salida 3, independientemente del valor de sig.

[!NOTA]

SIGINT no se admite para ninguna aplicación Win32.Cuando una interrupción de CTRL+C aparece, los sistemas operativos de Win32 generan un nuevo subproceso para controlar específicamente la interrupción.Esto puede hacer que una aplicación de un único subproceso como una en UNIX dejen de estar multiproceso, lo que da como resultado un comportamiento inesperado.

El argumento de func es una dirección un controlador señalado escribir, o a una de las constantes predefinidas SIG_DFL o SIG_IGN, también definido en SIGNAL.H.Si func es una función, se instala como el controlador de la señal para la señal determinada.El prototipo del controlador de la señal requiere un argumento formal, sig, de int escrito.El sistema operativo proporciona el argumento real con sig cuando una interrupción aparece; el argumento es señal que generó la interrupción.Así puede utilizar las seis constantes de manifiesto (enumeradas en la tabla anterior) dentro del controlador de la señal para determinar importantes producido y tome las medidas adecuadas.Por ejemplo, puede llamar a signal dos veces para asignar el mismo controlador a dos diferentes pasos, la prueba el argumento de sig dentro del controlador para realizar diversas acciones en función de la señal recibida.

Si está probando las excepciones de punto flotante (SIGFPE), los puntos de func a una función que toma un segundo argumento opcional que es una de las constantes de manifiesto definidos en FLOAT.H del formulario FPE_xxx.Cuando una señal de SIGFPE aparece, puede probar el valor del segundo argumento para determinar el tipo de excepción flotante a continuación para tomar las medidas adecuadas.Este argumento y sus valores posibles son extensiones de Microsoft.

Para las excepciones de punto flotante, el valor de func no se restaura de recibir la señal.Para recuperarse de excepciones de punto flotante, utilice el try/excepto las cláusulas con las operaciones de punto flotante.También es posible recuperar utilizando setjmp con longjmp.En cualquier caso, el proceso de llamada reanuda la ejecución con el estado flotante de indefinido izquierdo de proceso.

Si el controlador de la señal vuelve, el proceso de llamada reanuda la ejecución inmediatamente después del punto en el que recibió la señal de la interrupción.Esto es cierto independientemente del tipo de señal o de modo de funcionamiento.

Antes de que se ejecute la función especificada, el valor de func se establece en SIG_DFL.El paso siguiente de la interrupción se trata como se describe en SIG_DFL, a menos que una llamada intermedia a signal especifique lo contrario.Esta característica permite restaurar señala en la función llamada.

Dado que las rutinas de señal- controlador se denominan normalmente de forma asincrónica a una interrupción, la función de señal- controlador puede obtener el control cuando una operación de tiempo de ejecución está incompleta y en un estado desconocido.La lista siguiente se resumen las restricciones que determinan las funciones se pueden utilizar en la rutina de señal- controlador.

  • No emita las rutinas de bajo nivel o de STDIO.H de E/S (como printf y fread).

  • No llame a rutinas del montón o ninguna rutina que utiliza las rutinas del montón (como malloc, _strdup, y _putenv).Vea malloc para obtener más información.

  • No utilice ninguna función que genera una llamada del sistema (por ej., _getcwd, time).

  • No utilice longjmp a menos que la interrupción se produjo por una excepción flotante (es decir, sig es SIGFPE).En este caso, primero se restablece el paquete flotante con una llamada a _fpreset.

  • No utilice ninguna rutinas de superposición.

Un programa debe contener código flotante si es a la captura la excepción de SIGFPE con la función.Si el programa no tiene código flotante y no requiere el código señal- que administra de la biblioteca en tiempo de ejecución, declare simplemente un doble volatile e inicialícela en cero:

volatile double d = 0.0f; 

Las señales de SIGILL y de SIGTERM no se representan con Windows.Se incluyen para la compatibilidad con ANSI.Así puede establecer controladores de señal para estos pasos con signal, y también puede representar explícitamente estos pasos llamando a aumento.

Los valores de la señal no se conservan en los procesos de generación creados mediante llamadas a _exec o _spawn funciona.Los valores de la señal se restauran a predeterminado en el nuevo proceso.

Requisitos

Rutina

Encabezado necesario

signal

<signal.h>

Para obtener información adicional de compatibilidad, vea Compatibilidad en la Introducción.

Ejemplo

El ejemplo siguiente muestra el uso de signal de agregar algún comportamiento personalizado a la señal de SIGABRT.Para obtener más información sobre el comportamiento abort, vea _set_abort_behavior.

// crt_signal.c
// compile with: /c
// Use signal to attach a signal handler to the abort routine
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <tchar.h>

void SignalHandler(int signal)
{
    printf("Application aborting...\n");
}

int main()
{
    typedef void (*SignalHandlerPointer)(int);

    SignalHandlerPointer previousHandler;
    previousHandler = signal(SIGABRT, SignalHandler);
    
    abort();
}
  
  
  

Equivalente en .NET Framework

No es aplicable Para llamar a la función estándar de C, utilice PInvoke. Para obtener más información, vea La invocación de plataforma ejemplos.

Vea también

Referencia

Proceso y control ambiental

abort

_exec, funciones de _wexec

exit, _exit

_fpreset

_spawn, funciones de _wspawn