Udostępnij za pośrednictwem


signal

Zestawy przerywać obsługi sygnałów.

Ważna uwagaWażne

Nie należy używać tej metody do zamknięcia Windows Store aplikacji, z wyjątkiem testowania i debugowania scenariuszy.Sposoby Programmatic lub interfejsu użytkownika, aby zamknąć Windows Store aplikacji nie są dozwolone zgodnie z ppkt 3.6 wymogów certyfikacji aplikacji Windows 8.Aby uzyskać więcej informacji, zobacz cyklu życia aplikacji (Windows Sklep aplikacje).

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

Parametry

  • sig
    Wartość sygnału.

  • func
    Funkcję do wykonania.Pierwszy parametr jest wartością sygnału, a drugi parametr jest podwójna, które mogą być używane podczas pierwszy parametr jest SIGFPE.

Wartość zwracana

signalZwraca poprzednią wartość func związane z danego sygnału.Na przykład jeśli poprzednią wartość func był SIG_IGN, wartość zwracana jest również SIG_IGN.Zwracana wartość wynosząca SIG_ERR wskazuje błąd, w którym to przypadku errno jest ustawiona na EINVAL.

Zobacz _doserrno, errno, _sys_errlist i _sys_nerr Aby uzyskać więcej informacji na ten temat i innych kodów zwrotnych.

Uwagi

signal Funkcja pozwala użytkownikom wybrać jedną z kilku sposobów, aby obsłużyć sygnał przerwania z systemu operacyjnego.sig Argument jest przerwanie, do której signal odpowiada; musi mieć jedną z następujących stałych manifestu, zdefiniowany w SYGNALE.H.

sigwartość

Opis

SIGABRT

Nieprawidłowe zakończenie

SIGFPE

Błąd zmiennoprzecinkowych

SIGILL

Niedozwolona instrukcja

SIGINT

Sygnał CTRL + C

SIGSEGV

Dostęp do magazynu nielegalnych

SIGTERM

Żądania przerwania

Jeśli sig nie jest jednym z powyższych wartości, program obsługi nieprawidłowy parametr jest wywoływana, jak określono w Sprawdzanie poprawności parametru .Jeśli wykonanie może kontynuować, ta funkcja ustawia errno do EINVAL i zwraca SIG_ERR.

Domyślnie signal kończy działanie programu wywołującego z kod zakończenia 3, niezależnie od wartości sig.

[!UWAGA]

SIGINTnie jest obsługiwana dla dowolnej aplikacji systemu Win32.W przypadku wystąpienia przerwania CTRL + C, system operacyjny Win32 wygenerować nowy wątek do specjalnie obsługi tego przerwania.Może to spowodować aplikacją pojedynczego wątek, takie jak jeden w systemie UNIX stać się wielowątkowe, spowodowało nieoczekiwane zachowanie.

func Argument jest adresem do obsługi sygnałów, w którym możesz pisać lub jedną z wstępnie zdefiniowanych stałych SIG_DFL lub SIG_IGN, również jest zdefiniowany w SYGNALE.H.Jeśli func jest funkcją, jest zainstalowany jako obsługi sygnału dla danego sygnału.Prototyp obsługi sygnałów wymaga jednego argumentu formalne, sig, typu int.System operacyjny jest argumentem rzeczywistych przez sig po wystąpieniu przerwania; argument jest sygnał, który wygenerował przerwań.Ten sposób służy sześć manifestu stałych (wymienione w powyższej tabeli) wewnątrz nasza procedura obsługi sygnału do określenia przerwania, które miały miejsce i podejmą odpowiednie działania.Na przykład, można wywołać signal dwa razy, aby przypisać ten sam program obsługi do dwóch różnych sygnałów, przetestuj sig argument wewnątrz obsługi wykonać różne operacje oparte na sygnał odebrany.

Jeśli testujesz wyjątki zmiennoprzecinkowe (SIGFPE), func punkty do funkcji, która ma opcjonalny drugi argument, który jest jednym z kilku manifestu stałe zdefiniowane w FLOAT.H formularza FPE_xxx.Gdy SIGFPE sygnał występuje, można przetestować wartość drugiego argumentu, aby określić typ wyjątku zmiennoprzecinkowych i wtedy podjąć odpowiednie działania.Ten argument, a jej możliwymi wartościami są rozszerzeniami Microsoft.

Wyjątki zmiennoprzecinkowych, wartość func nie jest resetowany po otrzymaniu sygnału.Aby odzyskać z wyjątkami zmiennoprzecinkowych, instrukcji try / z wyjątkiem klauzule otaczającego unoszące się na operacje w punkcie.Istnieje również możliwość odzyskania, za pomocą setjmp z longjmp.W każdym z tych przypadków proces wywołujący wznawia wykonanie z Państwem zmiennoprzecinkowych procesu w lewo undefined.

Jeśli zwraca obsługi sygnału, proces wywołujący wznawia wykonanie bezpośrednio po punkcie, w którym otrzymał sygnału przerwania.Ta zasada obowiązuje bez względu na rodzaj sygnału lub trybu pracy.

Przed wykonaniem określonych funkcja wartość func jest ustawiona na SIG_DFL.Dalej sygnału przerwania jest traktowany jak opisano dla SIG_DFL, chyba że interwencji zadzwonić do signal określi inaczej.Ta funkcja pozwala zresetować sygnałów w wywołana funkcja.

Ponieważ procedury obsługi sygnałów zazwyczaj są wywoływane asynchronicznie, po wystąpieniu przerwania, nasza funkcja obsługi sygnałów może uzyskać kontrolę podczas operacji wykonywania jest niekompletne i w nieznanym stanie.Poniższa lista zawiera podsumowanie ograniczenia, które określają, które funkcje, można użyć w rutynowych obsługi sygnałów.

  • Do niższego poziomu problemu lub STDIO.Procedury wejścia/wyjścia H (takich jak printf i fread).

  • Nie wywołuj procedur sterty lub wszelkie rutynowych, korzystającej z procedury sterty (takich jak malloc, _strdup, i _putenv).Zobacz malloc Aby uzyskać więcej informacji.

  • Nie należy używać żadnych funkcji, który generuje wywołania systemowego (np. _getcwd, time).

  • Nie należy używać longjmp chyba że przerwanie spowodowane zmiennoprzecinkowych wyjątek (czyli sig jest SIGFPE).W tym przypadku najpierw zainicjować pakiet zmiennoprzecinkowych z wezwaniem do _fpreset.

  • Nie należy używać żadnych procedur nakładki.

Program musi zawierać kod zmiennoprzecinkowy, jeżeli jest do zalewkowania SIGFPE wyjątku za pomocą funkcji.Jeśli Twój program nie ma kodu zmiennoprzecinkowych i wymaga biblioteki uruchomieniowej kodu obsługi sygnałów, wystarczy zadeklarować lotnych podwójne i ustawić dla niej wartość zero:

volatile double d = 0.0f; 

SIGILL i SIGTERM sygnały nie są generowane w systemie Windows.Są one uwzględniane dla zgodności ANSI.Ten sposób można ustawić programy obsługi sygnału dla tych sygnałów z signal, i może także jawnie generować te sygnały poprzez wywołanie podnieść.

Sygnał ustawienia nie są zachowywane w uruchamiane procesy utworzone przez wywołania _exec lub _spawn funkcji.Ustawienia sygnału są resetowane do wartości domyślnych w nowy proces.

Wymagania

Rozpoczęto wykonywanie procedury

Wymaganego nagłówka

signal

<signal.h>

Aby uzyskać dodatkowe informacje o zgodności, zobacz zgodności we wprowadzeniu.

Przykład

W poniższym przykładzie pokazano użycie signal Aby dodać niektóre spowoduje uaktywnienie zachowania niestandardowego do SIGABRT sygnału.Aby uzyskać dodatkowe informacje na zachowanie abort, zobacz _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();
}
  
  
  

Odpowiednik w programie .NET Framework

Nie dotyczy. Aby wywoływać funkcji C standardowej, należy użyć PInvoke. Aby uzyskać więcej informacji, zobacz Przykłady wywołać platformy.

Zobacz też

Informacje

Proces i kontroli środowiska

abort

_exec, _wexec funkcje

exit, _exit

_fpreset

_spawn, _wspawn funkcje