Sdílet prostřednictvím


signal

Nastaví přerušení zpracování signálu.

Důležitá poznámkaDůležité

Nepoužívejte tuto metodu k vypnutí Windows Store aplikace, s výjimkou testování nebo scénářů ladění.Způsoby Programmatic nebo uživatelského rozhraní, zavřete Windows Store aplikace nejsou povoleny podle bodu 3.6 z požadavky na osvědčení app Windows 8.Další informace naleznete v tématu životního cyklu aplikací (apps úložiště systému Windows).

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

Parametry

  • sig
    Hodnota signálu.

  • func
    Funkce, které mají být provedeny.První parametr je hodnota signálu a druhý parametr je sub-code, který lze použít, pokud je první parametr SIGFPE.

Vrácená hodnota

signalVrátí předchozí hodnotu func spojené s danou signálu.Například pokud předchozí hodnota func byla SIG_IGN, vrácená hodnota je také SIG_IGN.Vrácená hodnota SIG_ERR v tomto případě označuje chybu, errno je nastavena na EINVAL.

Viz _doserrno, kód chyby, _sys_errlist a _sys_nerr Další informace o této a jiných návratových kódů.

Poznámky

signal Funkce umožňuje procesu, můžete zvolit jednu z několika způsobů, jak zpracovat signál přerušení z operačního systému.sig Argument je přerušení, ke kterému signal odpovídá; je nutné zvolit jeden z následujících manifestu konstanty definované v SIGNÁLU.H.

sigHodnota

Description

SIGABRT

Neobvyklé ukončení

SIGFPE

Chyba s plovoucí desetinnou čárkou

SIGILL

Neplatná instrukce

SIGINT

Signál CTRL + C

SIGSEGV

Přístup k úložišti nelegální

SIGTERM

Ukončení požadavku

Pokud sig se nejedná o některý z výše uvedených hodnot, je vyvolána obslužná rutina neplatný parametr, jak jsou definovány v Ověření parametrů .Pokud je povoleno spuštění pokračovat, tato funkce nastaví errno na EINVAL a vrátí SIG_ERR.

Ve výchozím nastavení signal ukončí volající program s ukončovací kód 3, bez ohledu na hodnotu sig.

[!POZNÁMKA]

SIGINTnení podporováno pro libovolnou aplikaci systému Win32.Dojde-li k přerušení CTRL + C, operačními systémy Win32 generovat nové vlákno, konkrétně toto přerušení zpracování.To může způsobit jeden podproces aplikace například v systému UNIX se s více vlákny, za následek neočekávané chování.

func Adresa popisovač signálu, který napíšete nebo některou z předdefinovaných konstant je argument SIG_DFL nebo SIG_IGN, také definované v SIGNÁLU.H.Pokud func je funkce, je nainstalován jako popisovač signálu pro daný signál.Popisovač signálu prototypu vyžaduje jeden formální argument sig, typu int.Operační systém poskytuje skutečné argument prostřednictvím sig dojde-li k přerušení; argument je signál, který generoval přerušení.Tedy můžete šest manifestu konstanty (uvedené v předchozí tabulce) uvnitř vaší obslužné rutiny signál k určení, které přerušení došlo k chybě a přijmout vhodná opatření.Například můžete volat signal dvakrát, chcete-li přiřadit stejné obslužné rutiny na dvou různých signálů, proveďte test sig argument uvnitř obslužné rutiny, chcete-li provést různé akce podle signál byl přijat.

Pokud testujete výjimky s plovoucí desetinnou čárkou (SIGFPE), func odkazuje na funkci, která přebírá volitelný druhý argument, který je jedním z několika manifestu konstanty definované v plovoucí desetinné ČÁRKY.H formuláře FPE_xxx.Když SIGFPE dojde k signálu, můžete otestovat hodnota z druhého argumentu k určení typu s plovoucí desetinnou čárkou výjimku a poté proveďte příslušná opatření.Tento argument a jejími možnými hodnotami jsou rozšíření společnosti Microsoft.

Výjimky s plovoucí desetinnou čárkou, hodnota func není vynulován po přijetí signálu.Napadení výjimky s plovoucí desetinnou čárkou, zkuste použít / s výjimkou klauzule kolem plovoucí bod operací.Je také možné obnovit pomocí setjmp s longjmp.V obou případech volající proces pokračuje spuštění s plovoucí desetinnou čárkou stavu procesu vlevo undefined.

Pokud vrátí popisovač signálu volající proces pokračuje spuštění ihned po bodu, kdy obdržel signály přerušení.To platí bez ohledu na typ signálu nebo provozním režimu.

Před provedením určené funkce, je hodnota func je nastavena na SIG_DFL.Další signály přerušení se zachází, jak je popsáno u SIG_DFL, pokud zasahující volání signal jinak.Tato funkce umožňuje obnovit signály v volané funkce.

Protože popisovač signálu rutin jsou obvykle volána asynchronně, dojde-li k přerušení, obdržet popisovač signálu funkce ovládacího prvku při spuštění operace je neúplný a v neznámém stavu.Následující seznam obsahuje souhrn omezení, které určují funkce, které lze použít v signálu rutiny ovladače.

  • To není problém nízké úrovně nebo STDIO.Rutiny H vstupně-výstupní operace (jako je například printf a fread).

  • Nevolejte rutin haldy nebo rutiny, který používá haldu rutin (jako je například malloc, _strdup, a _putenv).Viz malloc pro další informace.

  • Nepoužívejte funkci, která generuje volání systému (např. v _getcwd, time).

  • Nepoužívejte longjmp Pokud přerušení, které je způsobeno vyjímka s plovoucí desetinnou čárkou (tj, sig je SIGFPE).V tomto případě první inicializaci balíček s plovoucí desetinnou čárkou s voláním _fpreset.

  • Nepoužívejte žádné rutiny překrytí.

Program musí obsahovat kód s plovoucí desetinnou čárkou, pokud je soutisk SIGFPE výjimku pomocí funkce.Pokud program nemá kód s plovoucí desetinnou čárkou a vyžaduje kód pro zpracování signálu knihovna run-time, stačí deklarovat těkavých dvojitě a inicializujte ji na nulu:

volatile double d = 0.0f; 

SIGILL a SIGTERM signály nejsou generovány v systému Windows.Jsou zahrnuty z důvodu kompatibility ANSI.Takto můžete nastavit signál obslužné rutiny pro tyto signály s signal, a tyto signály mohou generovat také explicitně voláním vyvolat.

Není zachováno nastavení signálu v vytvářený procesy vytvořené voláním _exec nebo _spawn funkce.Nastavení signálu se obnoví na výchozí v novém procesu.

Požadavky

Byla zahájena rutina

Požadované záhlaví

signal

<signal.h>

Další informace o kompatibilitě, viz Compatibility v úvodu.

Příklad

Následující příklad ukazuje použití signal Chcete-li přidat některé vlastní chování SIGABRT signálu.Další informace o chování přerušení, viz _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();
}
  
  
  

Ekvivalent v rozhraní .NET Framework

Nelze použít Volání funkce standardním C pomocí PInvoke. Další informace naleznete v tématu Platformu vyvolání příklady.

Viz také

Referenční dokumentace

Proces a řízení prostředí

abort

_exec funkce _wexec

exit, _exit

_fpreset

_spawn funkce _wspawn