C Sigaction Function Bruk

C Sigaction Function Bruk
En Sigaction () er en funksjon som gjør det mulig å ringe/observere eller undersøke en spesifikk handling assosiert med et bestemt signal. Det antas å vurdere en signal- og sigaksjonsfunksjon på samme side. Men i virkeligheten har det ikke skjedd. Signal- () -funksjonen blokkerer ikke andre signaler når den nåværende behandlerens utførelse er under prosess. Samtidig kan Sigaction -funksjonen blokkere andre signaler til den nåværende behandleren er returnert.

Syntaks

#inkludere
# int Sigaction (int sig, const struct Sigaction *__ RESTRICT__ NY, STRUCT SIGACTION *__ BESTILLING__ GAMLE);

Sigaksjonsfunksjonen undersøker handlingen assosiert med et bestemt signal. Vi snakker nå om argumentene i parameteren til Sigaction -funksjonen. Den første er int 'sig', ettersom datatypen avslører at det er et tall som refererer til signalet som allerede er gjenkjent. Sigaction -funksjonen setter handlingen og knytter den til signalet. SIG -argumentet som brukes må være på biblioteket.

Konstant struct Sigaction er en peker som først blir referert til som null for det meste. I så fall undersøker Sigaction -funksjonen handlingen som er definert for øyeblikket for å håndtere SIG. Dette vil ikke endre eller avbryte denne handlingen. Og hvis den nye pekeren ikke blir referert til som nullverdi, vil den peke på en Sigaction Structure. Handlingen identifisert spesifikt i Sigaction Structure blir da den nye handlingen knyttet til SIG.

Det tredje argumentet er Struct Sigaction *gammel det påpeker minneadressen som Sigaction -funksjonen lagrer Sigaction Structure. Sigaction -funksjonen bruker denne minneadressen til å lagre strukturen som beskriver aktiviteten som for øyeblikket er assosiert med SIG. Den gamle verdien kan være en nullverdi; I så fall lagres ikke sigaksjonsstrukturen som informasjon.

Sigaction Structure

Nå skal vi snakke om Sigaction Structure.

Medlemmene som er til stede i strukturen er nevnt her.

Void (*) (int) sa_handler

Det er en peker for funksjonen og håndterer signalet som kommer mot den. Verdien av denne funksjonen kan vise standardvirkningen eller angi signalet som skal ignoreres.

SIGSET_T MASK

Vi kan ikke bruke mekanismen for å blokkere noe signal; Hvis Sa_Mask har brukt blokkeringssignalene, vil disse signalene bli ignorert. Sigaction () -funksjonen returnerer ingen feil.

Int sa_flags

Det er mange flagg som påvirker signalets oppførsel. Noen av dem er forklart her.

_SA_IGNORE

Dette er den eneste utgangen, og noen applikasjon kan ikke spesifisere den.

Sa-Restart

Den ber systemet om å få bibliotekets omstartfunksjoner hvis de blir avbrutt av et signal. Funksjonene som denne omstartfunksjonen brukes på er de som er definert for å bli avbrutt av signalet og deretter sette feil til eint som aksepterer (), pause (), lukk () og stor pause () er de funksjonene som er Startbart hvis et signal avbryter dem.

Sa_siginfo

Denne funksjonen forteller systemet om å bruke signalaksjonen som er spesifisert av SA_SIGACTION i stedet for SA_Handler. Når flagget er av, og handlingen påvirkes av signalet, blir signalbehandlerfunksjonen spesifisert av SA_Handler påkalt som en tomromfunksjon (int signo); Her inneholder Signo signalnummeret generert systemet.

SA_SIGACTION

Det er en peker som peker på den tildelte funksjonen for å håndtere signalet. Denne funksjonen inneholder tre parametere. Det første inkluderer et type heltall som inneholder funksjonens signal for å bli påkalt. Det andre argumentet er en pekertype siginfo_t; Den inneholder ytterligere informasjon om signalkilden. Den tredje er 'pekeren som er tom for ugyldig.'

Implementering av SigAction -funksjon

Vi har implementert Sigaction -kodene i Linux -operativsystemet. Bruk en tekstredigerer for å skrive kildekoden på programmeringsspråket C; For utgangen fra den resulterende verdien, bruk Ubuntu -terminalen ved å samle gjennom en GCC -kompilator. Som kompilerer og utfører koden.

Eksempel 1

Dette eksemplet inneholder en liste over biblioteker og . I dette eksemplet brukes en signalmaske og settes med Sigaction () til ingen å ringe etter den andre behandleren, spesielt når en enkelt behandler er i bruk. Signalbehandlerfunksjonen inneholder Signo som et argument.

Prosess -IDen vises i hovedprogrammet for å sikre arbeidet. Sigaction er en struktur som beskriver en signalbehandler. Dette er grunnen til at en signalbehandler er inneholdt av den. En signalmaske brukes som viser at det skal være blokkering av et signal mens funksjonen til signalhåndtering er i utførelse. Spesifiser nå signalbehandlerfunksjonen når ett spesifisert signal har oppstått.

# Struct Sigaction Act;
# Act.Sa.Handler = $ Sighandler;

Etter det legges alle signalene til signalmaskesettet. Alle signalene vil bli blokkert når signalbehandlerfunksjonene kjører. Når signalbehandleren vanligvis eksisterer, gjenoppretter den den opprinnelige signalmasken. Sa_restart vil gjenoppta funksjonen. En signalbehandler legges til Sigint.

Etter å ha skrevet koden, kan du kompilere den ved hjelp av kompilatoren i Ubuntu -terminalen. “Sig.C ”er navnet på en fil.

$ gcc -o sig. c
$./Sig

Ved utførelse kan du se at prosess -IDen først vises hvis signaler må blokkeres. Den viste meldingen betyr at funksjonen vil gi en positiv verdi.

Eksempel 2

Tenk nå på et annet eksempel, der den første delen av eksemplet avgjør om Sigchld -signalet for øyeblikket blir ignorert. Ved å bruke en nullpeker for et nytt argument, endres ikke den nåværende signalbehandleren. Hovedprogrammet inneholder IF -uttalelsen for å bruke Sigaction -funksjonen; Hvis den returnerte verdien er -1, betyr det at barnet blir ignorert. Og i den andre delen, hvis den returnerte verdien er signalet i seg selv. Det betyr at barnet blir misligholdt.

Ved utførelse vil du se at barnet misligholder.

Eksempel 3

Dette eksemplet inneholder samme funksjonalitet som det andre eksemplet, men noen tilleggsfunksjoner er også lagt til. Som en ny behandler blir lagt til i denne funksjonen gjennom Sigaction.

Konklusjon

Artikkelen 'Sigaction Function Usage' inneholder funksjonen som fungerer og en detaljert beskrivelse av dens parametere i argumentene. Sigaction spiller en viktig rolle i å blokkere signalene som ikke er anerkjent eller er fra hackere. Det er grunnen til at de fleste programmerere foretrekker Sigaction -funksjoner som skal brukes i programmene. SA_FLAG er et essensielt argument for Sigaction -funksjonen, så vi har forklart noen viktige flagg med grunnleggende funksjonalitet. Linux -operativsystemet gjelder for en viktig rolle i implementeringen av Sigaction -funksjonen på C -programmeringsspråket. Denne guiden tar sikte på å forklare Sigaction -funksjonene og strukturen designet for å målrette signalene som nærmer seg den.