C SigProcMask -funksjonsbruk

C SigProcMask -funksjonsbruk
Du har kanskje hørt om programmering av stikkontakt i C. En av sokkelfunksjonene er "SigProcMask" -funksjonen. Denne funksjonen er vanligvis brukt i koden for å inspisere eller endre signalmasken til anropsfunksjonen. Signalmasken er et begrep som brukes for en gruppe signaler som for tiden er blokkert og ikke kan formidles for anropsfunksjonen. Slikt type signal er kjent som “blokkerte signaler.”Du kan si at en prosess fremdeles kan motta de blokkerte signalene, men den vil ikke bli brukt før de er blokkert og utgitt, jeg.e., oppvokst. Inntil da vil det være i påvente. Derfor, innen dagens guide, vil vi diskutere bruken av SigProcMask -funksjonen i C -programmering. La oss få en start.

Etter Ubuntu 20.04 Vellykket pålogging, du må starte skallet til Ubuntu 20.04 System først etter påloggingen. Så prøv ut snarveien “Ctrl+Alt+T” ganske enkelt på skrivebordsskjermen. Den vil lansere terminalskallet for deg på noen sekunder. Sørg for å oppdatere systemet ditt ved å bruke den treffende pakken til systemet ditt. Etter det må du utføre "berørings" -instruksjonen sammen med filnavnet du vil generere, jeg.e., For å opprette C -filen via skallet. Denne nyopprettede filen finner du i "hjemme" -mappen i systemets filutforsker. Du kan prøve å åpne den med “tekst” -redigereren for å lage kode i den. En annen måte å åpne den i skallet på er å bruke “GNU Nano” -redigereren ved å bruke nøkkelordet “Nano” med et filnavn som demonstrert under.

Eksempel 01:

Vi har startet koden vår i “Nano” -redaktøren ved å inkludere noen nødvendige C -overskrifter. Disse overskriftene er kanskje de vanligste overskriftene som “stdio.H ”,“ Unistd.H ”, og“ Stdlib.h ”. Annet enn det, den viktigste overskriftenfilen "Signal.H ”er lagt til for å bruke signalhåndteringsfunksjonene i C -kode. Alt arbeidet er gjort i dette programmets hovedmetode (). Så etter at vi har startet metoden, har vi initialisert noen signalkonstruksjonsvariabler ved bruk av “sigset_t” -objektet, i.e., S, OS og PS. "S" står for signal, "OS" står for et originalt signalsett, og "PS" står for et ventende signalsett.

"Sigemptyset" har brukt "S" -konstruksjonen for å initialisere eller erklære en signalmaske og se bort fra alle signalene. Etter dette er "Sigadddset" -funksjonen blitt brukt til å legge til det initialiserte signalet "S" til det spesifiserte Sigint -signalsettet. Sigint -signalbehandlerrutinen refererer til “Ctrl+C”, i.e., avbryter karakter. Det vil stoppe utførelsen av den nåværende prosessen og komme tilbake til hovedsløyfen.

Nå kommer SigProcMask -funksjonen her ved hjelp av tre parametere. SIG_BLOCK -parameteren viser at alle signalene som finnes i et signalsett "s" vil bli lagt til det gjeldende signalsettet. & S indikerer pekeren til et spesifikt signalsett som har blitt brukt til å endre signalmasken i henhold til “Sigint” -konstruksjonen. "OS" -parameteren peker mot signalsettet som lagrer signalmasken for en bestemt metode. Printf -setningen er her for å vise den gamle signalmasken til signalsettet. "Sigpending" -funksjonen er her for å lagre data angående signalene i signalsettet som venter. Printf -setningen er igjen her for å vise det ventende signalet som er satt på skallet ved hjelp av “PS” -konstruksjonen. "Kill" -metoden kom hit for å drepe den nåværende prosessen ved å bruke prosess -ID via "getpid ()" -funksjonen. Sigpending -funksjonen blir igjen kalt for å få de ventende signalene i settet, og Printf -setningen vil vise dem. SigProcMask -funksjonen bruker "SIG_UNBLOCK" forhåndsdefinerte sett for å fortsette å fjerne blokkering og heve funksjonen i den verserende listen. “S” signalsettet vil bli utgitt ved hjelp av signalmaske “OS.”

Sett sammen C-kodefilen din ved å bruke den viste beløpsinstruksjonen i skallet.

Filen din er utført. Det vil vise deg det gamle signalet som er satt på skallet, “OS.”Men ettersom signalene om sett“ S ”nå er blokkert, vil vi se at signalene mottar, men ventende og ikke utfører. Vi kan ikke drepe prosessen da behandlingen av signaler er blokkert. Endelig har vi gitt ut signalene.

Eksempel 02:

La oss se på et annet eksempel på "SigProcMask" -funksjonen er C for å blokkere og fjerne blokkering av det spesifikke signalsettet. Så vi har lagt til en ny fil og prøvd en ny kode. Først må du legge til de samme toppfilene i kodefilen, som vist nedenfor. Den brukerdefinerte “catcher” -funksjonen er her for å bare vise at vi er inne i denne funksjonen ved å bruke Printf-funksjonen.

Hovedutførelsen starter fra hoved () -funksjonen til koden vår. Den inneholder to argumenter. Først av alt har vi benyttet tidskonstruksjoner “S” for start og “F” for finish via 'TIME_T ”nøkkelordet. Strukturen Sigaction er erklært som "sakt" for å sette naturen for et signal for å gjøre noe. "Sigset_t" -konstruksjonen brukes til å erklære to signalsett, i.e., “NS” for et nytt sett og “OS” for gamle sett. Variabelen "DIF" er erklært. Først av alt brukes SigemptySet -funksjonen til å initialisere signalmasken for "SACT" -struktur og ekskludere alle signaler. SA_FLAGS -behandleren har blitt brukt til Bitmask of Sigaction og initialisert til null. "SA_Handler" har blitt brukt til å erklære "Catcher" -funksjonen som signalbehandler ved å bruke "SACT" Sigaction -objektet. Sigaction -funksjonen kalles her ved hjelp av Sigalrm for å angi alarmen for signalet “SACT” her.

"Sigemptyset" er blitt brukt på “NS” -signalet som er satt til å initialisere en signalmaske og ekskludere alle signalene. Sigadddset -funksjonen legger Sigalrm til “NS” -signalet. SigProcMask legger til “NS” -signalene til det gjeldende signalsettet. “OS” -signalsettet representerer signalmasken for en bestemt prosess. Starttiden er blitt notert og skrevet ut ved hjelp av “CTime ()” -funksjonen i Printf. Alarmen i 1 sekund er initialisert, og slutttiden er blitt notert. Forskjellen mellom finish og starttider er beregnet ved bruk av "diff -time" -funksjonen. Hvis forskjellen er mindre enn 10 sekunder, vil SigProcMask -funksjonen bruke “OS” -signalet for å erstatte den nåværende signalmasken for en bestemt prosess ved bruk av SIG_SETMASK. Den siste PRINTF -setningen er her for å vise tiden når et signalsett frigjøres for alarmer.

Etter å ha samlet og kjørt filen, viser den oss tiden da alarmsignalsettet er blokkert. Etter noen sekunder heter Catcher -funksjonen, og en annen uttalelse viser blokkeringstiden for alarmsignalet som skal frigjøres.

Konklusjon:

Denne artikkelen viser forklaringen angående SigProcMask -funksjonsbruk på C -språket. Vi har diskutert to korte og enkle eksempler for å illustrere arbeidet med SigProcMask -funksjonen sammen med andre signalfunksjoner. Vi håper at denne artikkelen vil være en bonus for hver bruker som er ny på signaler.