Signal.h

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.

Datatyper

Standarden erklærer en datatype, sig_atomic_tder er atomisk tilgængelig , selv ved tilstedeværelse af asynkrone afbrydelser . [en]

Makroer

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.

Funktioner

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]

Metoder

  • int raise(int sig). Fremkalder kunstigt et signal.
  • psignal(int sig, const char *s), udskriver til stderr en streng, der indeholder signalnummeret. Brugt i 4.3BSD , Solaris og Linux , men ikke opført i POSIX , C-standardbiblioteket og SUS . På de samme systemer indeholder string.h en ikke-standard strsignal(int sig), som fungerer på samme måde som strerror .
  • void* signal(int sig, void (*func)(int))angiver den handling, der skal udføres, når programmet modtager et signal sig. Hvis func er lig med SIG_DFL, så opstår standardbehandlingen for det specificerede signal. Hvis func er lig med SIG_IGN, ignoreres signalet. Ellers peger func på signalhåndteringsfunktionen for at kalde, når signalet modtages. Func-funktionen kan afsluttes ved at udføre en returoperation eller ved at kalde selvterminerende, afsluttende eller springende funktioner.

Medlemskonstanter

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

Noter

  1. 1 2 3 4 ISO/IEC 9899:TC3 7.14 . Hentet 29. december 2011. Arkiveret fra originalen 11. januar 2018.

Links