OS vil sende et signal, som er et programvaregenerert avbrudd, til en prosess når brukeren trykker på “CTRL-C” -tasten eller når en annen prosess må kommunisere med prosessen. En prosess kan bare motta et visst sett med signaler. Heltall fungerer som identifikatorer for signaler. De symbolske navnene er tilordnet signalnumre. Et signal utstedt til overordnet prosess når et barns prosess avsluttes er Sigchld, for eksempel.
Et signal overføres til en prosess, som setter den aktuelle biten i prosessens ventende signaler heltall. OS undersøker de verserende og blokkerte heltallene hver gang en prosess blir valgt for å kjøre på en bestemt prosessor. Prosessen gjenopptas riktig og gjenopptar utførelsen ved neste instruksjon hvis det ikke er noen påvente av signaler. Når ett eller flere signaler blir stoppet, men en eller flere fortsatt er i påvente, blir prosedyren også videreført normalt med signalene som fremdeles blir notert som verserende. Hvis ett eller flere signaler ikke er blokkert, men er i påvente, kaller OS signalbehandlingsfunksjonene i prosessen 'kode.
Syntaks av signalfunksjonen på C -språk
C -bibliotekets signalfunksjon oppretter en signalbehandler eller funksjon med signalnummeret SIG. Signal- () -funksjonens erklæring er gitt i følgende:
void (*signal (int sig, void (*func) (int))) (int)
La oss diskutere hver av signalfunksjonsparametrene i detalj. "Sig" er signalnummeret som har en håndteringsfunksjon tilknyttet den. Her er noen avgjørende standard signalnumre:
Sidabrt betegnes som signal unormal avslutning som den som startes av funksjonen. SIGFPE blir referert til som et unntak fra signalet Floating-Point, som er en feil matematisk operasjon som en divisjon med null eller en overfylt operasjon (ikke alltid ved bruk av en flytende punktoperasjon.)
Sigill er signalet ulovlig og er en ugyldig instruksjon eller et ugyldig funksjonsbilde. Vanligvis er et forsøk på å utføre en data- eller kodekorrupsjon skylden for dette. Sigint kalles som et signalavbrudd som er en interaksjonell oppmerksomhetscue. Brukeren av applikasjonen er vanligvis den som genererer den. Sigsevg er forkortelsen av brudd på signalsegmentering og dens uautoriserte tilgang til data som skjer når programvaren prøver å lese eller skrive dataene som ikke er i minnet som har blitt tildelt det.
Sigterm er forkortelsen for signaloppsigelsen der programmet mottok en forespørsel om oppsigelse.
En funksjonspeker er representert med "func" -parameteren. En av følgende forhåndsinnstilte funksjoner kan brukes her eller en funksjon opprettet av programmereren. SIG_DFL er signalhåndteringen som standard. Signalet blir behandlet med standardresponsen for det spesifikke signalet. Sig_ign er signalet ignorert. Signalet blir ignorert.
Eksempel 1:
Det er forskjellige standard signalbehandlerrutiner tilgjengelig. Hvert signal har en tilsvarende standardbehandlerrutine. De vanlige handlingene utført av de forskjellige standardbehandlerprosedyrene inkluderer ignorering av signalet som betyr å gjøre ingenting og bare gå tilbake. Prosessen skal avsluttes. Fortsett ved å slippe en blokkert prosess. Stopp prosedyren ved å blokkere den. Denne forekomsten illustrerer standard signalbehandler på C -språket:
#inkludere
#inkludere
#inkludere
#inkludere
#inkludere
#inkludere
void Handle_sigint (int sig)
printf ("signalbehandler");
int main ()
Signal (Sigint, Handle_sigint);
mens (1)
printf ("hei til c språk \ n");
søvn (1);
retur 0;
Sammen med de andre nødvendige overskriftsfilene importerte vi “Signalet.h ”headerfil. “Signalet.H ”overskriftsfil inneholder en makrokonstant definisjon for signalene. Handle_sigint -funksjonen er konstruert som tar heltallobjektet “sig”. Vi kalte denne funksjonen i hovedfunksjonen vår. Hovedfunksjonen benyttet signalfunksjonsanropet og tar de to argumentene: det første argumentet er Sigint for signalavbruddet, og det andre argumentet er Handle_signInt for signalbehandlerformål. Mens Loop er definert som itererer over Printf -setningen som viser “Hello to C Language” -strengen uendelig tid til brukeren trykker på CTRL C -kommandoen.
Strengen er trykt uendelig tid i utgangen. Når han mottar SIGINT -signalet og bruker standardbehandleren for å avslutte prosessen, kan brukeren trykke CTRL+C for å avslutte prosessen.
Eksempel 2:
Bortsett fra Sigkill, kan en prosess bruke sin behandlerkode for å erstatte standard signalbehandler for praktisk talt alle signaler. Ethvert navn er akseptabelt for en signalbehandlerfunksjon, men det må ha en INT -parameter og en returtype tomrom. Følgende eksempelkode er illustrasjonen av en brukerdefinert signalbehandler:
#inkludere
#inkludere
void Handle_sigint (int sig)
printf ("signaler fanget %d \ n", sig);
int main ()
Signal (Sigint, Handle_sigint);
mens (1);
retur 0;
Etter å ha inkludert overskriftsfilen, bare begynn med koden. Vi definerte funksjonen til en signalbehandler. INT SIG -parameteren sendes til signalbehandlerfunksjonen. Denne funksjonen er behandleren for SIGINT og skriver ut uttalelsen av signalet som blir fanget når brukeren legger inn “Ctrl+C” -kommandoen. Inne.
Programmet vil gå i mens Loop og skriver ut følgende utgang på hver “Ctrl+C” -kommando:
Konklusjon
Hele denne guiden utdanner deg om signalfunksjonen i C. Vi har gått over en introduksjon til signaler i C, sammen med en struktur av signaler og deres tilsvarende eksempler. Når det gjelder å adressere de uplanlagte forstyrrelsene som skjer gjennom hele programmets utførelse i løpet av kjøretid, er C -språkets signalkommando avgjørende. Siden det fungerer som et signal for brukeren og kan oppdage feil under programutførelsen, kan signalfunksjonen håndtere disse med letthet.