signal.h er en header-fil defineret i C-standardbiblioteket til at specificere, hvordan et program håndterer signaler under dets udførelse. Signalet kan enten være synkront med et opkald raise()eller asynkront.
Hver implementering bestemmer hvilket signal der genererer hvad og bestemmer deres generering.
Denne del af biblioteket bruges til at opsnappe signaler - tildele en handler til et specifikt signal.
Signalhandleren kan kun kalde følgende funktioner: _exit(), _Exit(), abort(), raise()(kun hvis handleren ikke kaldes af afbrydelses- eller hævefunktionerne). Kaldning af andre biblioteksfunktioner fører til udefineret adfærd, selvom sådanne opkald kan tillades af individuelle implementeringer, for eksempel har posix en liste over asynkron- signalsikre funktioner.
Standarden erklærer en datatype, sig_atomic_tder er atomisk tilgængelig , selv ved tilstedeværelse af asynkrone afbrydelser . [en]
Standarden erklærer makroerne SIG_DFL, SIG_ERR, SIG_IGN, der bruges som argumenter og returværdier for funktionen signal(). [1] Makroen SIG_DFL bruges til at indstille standardadfærden for det valgte signal, SIG_IGN bruges til at ignorere signalet, og SIG_ERR bruges som returværdi, der indikerer en fejl.
Derudover definerer standarden følgende signaltyper: [1]
Konstant | Betyder |
---|---|
SIGINT | Modtagelse af et interaktivt signal |
SIGILL | Ugyldig instruktion |
SIGABRT | Unormal programafslutning, der kan være forårsagetabort() |
SIGFPE | En fejlagtig aritmetisk operation såsom division med nul eller overløb |
SIGSEGV | Fejlagtig adgang til et objekt i hukommelsen |
SIGTERM | Anmodning om at stoppe eksekveringen |
og tillader andre, der er platformspecifikke. Når programmet starter, kan nogle af signalerne ignoreres, for den anden del bestemmes standardadfærden.
Standarden erklærer følgende funktioner:
#include <signal.h> void ( * signal ( int sig , void ( * func )( int )))( int ); int hæve ( int sig );Funktionen signalindstiller en handler funcfor signalet sig. funcDet kan tage SIG_IGNog som et argument SIG_DFL. Hvis det lykkes, returnerer funktionen den gamle signalbehandler, ellers SIG_ERR.
Hvis handleren returnerer på signaltypen SIGILL, SIGFPEeller på SIGSEGVanden måde er forbundet med runtime-fejl, er programmets opførsel udefineret. Derudover kan handleren, hvis den ikke kaldes med abort eller raise, kun ændre variabler af typen volatile sig_atomic_t.
Funktionen raisegenererer et signal sig. [en]
Konstant | Betyder | Standarder | |
---|---|---|---|
SIGHUP | sluk lyset | POSIX | |
SIGINT | Afbryde | ANSI | |
SIGQUIT | Afslut | POSIX | |
SIGILL | Ugyldig instruktion | ANSI | |
SIGABRT | selvstop | ANSI | |
SIGTRAP | Opsnappe en begivenhed | POSIX | |
SIGIOT | I/O aflytning | 4.2BSD | |
SIGEMT | Aflytning af emulering | 4.2BSD | |
SIGFPE | floating point undtagelse | ANSI | |
SIGKILL | Uopfanget termineringssignal | POSIX | |
SIGBUS | Bus fejl | 4.2BSD | |
SIGSEGV | Segmenteringsovertrædelse | ANSI | |
SIGSYS | Ugyldigt argument til systemkald | 4.2BSD | |
SIGPIPE | Kanalbrud | POSIX | |
SIGALRM | Tiden er gået | POSIX | |
SIGTERM | Færdiggørelse | ANSI | |
SIGUSR1 | Brugersignal 1 | POSIX | |
SIGUSR2 | Brugersignal 2 | POSIX | |
SIGCHLD | Skift status for en underordnet proces | POSIX | |
SIGCLD | Svarende til SIGCHLD | System V | |
SIGPWR | Genstart efter et strømproblem | System V | |
SIGXCPU | CPU tidsgrænse | POSIX |