Hvordan bruke valg av systemanrop i C

Hvordan bruke valg av systemanrop i C
Select () systemanrop gjør det mulig for et system for å holde rede på flere filbeskrivelser. Så det utvalgte systemanropet venter på at en av beskrivelsene eller en helhet skal vise seg å være "klar" for en bestemt type I/O -aktivitet (e.g., inngang mulig). Hvis den påfølgende I/O -prosessen (e.g., Les (2)) kan utføres til tross for blokkering, er filbeskrivelsen ansett som i stand. Select () -metoden beskriver om en dokumentbeskrivelse er tilgjengelig for lesing, utarbeidet for skriving eller i unntakstilstand. Anta at den uttalte situasjonen er falsk for helt de uttalte filbeskrivelsene. I så fall er Select () systemanropblokker før de nevnte omstendighetene er gyldige for minst en av de uttalte dokumentbeskrivelsene, lik det angitte intervallet for timeout.

Eksempel for valg av systemanrop:

La oss ha et enkelt eksempel for å sjekke ut arbeidet med utvalgte systemanrop. Åpne kommandolinjeskallet ved å bruke “Ctrl+Alt+T.”Etter terminalåpningen, må du sørge for at du har en C -språkkompilator installert på systemet ditt fordi koden ikke vil fungere uten den. Hvis du ikke har en, kan du prøve kommandoen nedenfor for å gjøre det.

$ sudo apt install GCC

Hvis du vil se Linux Select System Call Working, må du ha Manpages-Dev-pakken installert på systemet ditt i henhold til kommandoen nedenfor. Skriv brukerpassordet ditt for å fortsette.

$ sudo apt installer manpages-dev

Du kan se syntaks og arbeid av utvalgte systemanrop ved hjelp av “Man” -kommandoen.

$ mann 2 Velg

Output Man -siden for valget av valgt system vises nedenfor. Avslutt det ved å trykke på “Q” -tasten.

Standard kataloger, kommandoskallterminal og pseudo-terminale applikasjoner, strømmer sentrerte dokumenter, FIFOS, inkludert rør, støttes alle av Select () -modulen. Aktiviteten til Select () på dokumentbeskrivelser som refererer til disse andre filformatene er ukjent. Så nedenfor er forklaringen på den utvalgte systemanropet.

Beskrivelsen av syntaks vist i bildet over er beskrevet nedenfor.

Over er biblioteket som skal inkluderes i C -koden mens du bruker SELECT -systemanropet. Hvis den ikke er inkludert, fungerer ikke koden.

De NFDS Uttalelse definerer filbeskrivelsessettet som vil bli evaluert. Select () -metoden sjekker filbeskrivelser mellom 0 og NFDS-1.

Samtidig som readfds er ikke null, det refererer til en rekke skjema FD_SET som definerer hvilke dokumentbeskrivelser som skal testes for beredskap til å lese på inngang og hvilke dokumentbeskrivelser som skal være klar til å lese på output.

Når skrivefds Parameter er ikke tom, det refererer til en enhet med skjema FD_SET som definerer hvilke dokumentbeskrivelser som skal testes for beredskap til å innskrive ved inndata. Dokumentbeskrivelsene bør være forberedt på å komponere på utdata.

Mens errorfds Parameteren er ikke tom, det refererer til et objekt av snill FD_SET, som bestemmer hvilke dokumentbeskrivelser som skal testes for å avvente feiltilstand på innspill; Dokumentbeskrivelsene skal også verifiseres på utdata.

Readfds, WritFDS og ErrdFDS -parametrene oppdateres etter gjennomføring for å betegne at dokumentbeskrivelser er utarbeidet for å ha lest, fullt utarbeidet for å skrive eller til og med ha en unntakstilstand som venter på, følgelig. Hvis den påfølgende biten er fikset ved inngang og den aktuelle situasjonen er gyldig for hver filbeskrivelse litt under NFD -er, vil den påfølgende biten bli plassert på effektiv prestasjon.

Mens tidsavbruddsparameteren egentlig ikke. Velg () ikke helt hindrer om slik tidsavbruddsparameter fører til et strukturens tidevalske objekt med 0 elementer. SELECT () Stopper med mindre en forekomst lar en av filtrene hentes med et sant (ikke-null) resultat, om tidsavbruddet er en tom referanse. SELECT () lykkes effektivt og produserer 0 når ventetiden avsluttes allerede før forekomsten skjer, noe som kan kreve at en av flere masker blir justert til en verdi som ikke er null.

Denne makroen eliminerer samlingen (sletter alle dokumentbeskrivelsene). Det kan brukes som det aller første trekket i initialisering av en dokumentbeskrivelsesinnsamling.

Dokumentbeskrivelsen FD legges til samlingen av denne makroen. Å bruke en dokumentbeskrivelse til en samling som allerede har eksistert ville være ikke-operativ og derfor ikke resulterer i en unntaksfeil.

Dokumentbeskrivelsen FD fjernes fra samlingen av denne makroen. En filbeskrivelse eliminert fra samlingen som ikke eksisterer er ikke-operativ og derfor ikke resulterer i et unntak.

SELECT () -systemet endrer informasjonen eller dataene til samlingene i henhold til reglene nevnt ovenfor. FD ISSET () -makroen kan kastes av ved å påkalle Select () for å se om en dokumentbeskrivelse forblir tilgjengelig i en samling.

La oss lage en ny filtypefil som heter “Ny.C ”som nedenfor.

$ nano ny.c

GNU -redaktøren er åpnet. Skriv ut koden under den. Koden inneholder overskrifter, hovedfunksjon med noen filbeskrivelser som utdypet ovenfor. Den inneholder også en struktur for tidsintervallverdien. Så har vi brukt Select System Call for å sjekke for feilen i "hvis" -uttalelsen. Trykk “CTRL+S” for å lagre denne koden og “Ctrl+X” fra å avslutte redaktøren.

Sett nå koden ved hjelp av "GCC" -instruksjon.

$ GCC NY.c

Kjør koden og ikke legg til noen inngang. Utgangen vil si “Velg timeout.”

$ ./en.ute

Igjen, kjør koden og gi noen innspill i terminalen, e.g., “Aqsa.”Det vil sende ut at“ dataene er tilgjengelige.”

Konklusjon:

Vi har implementert det utvalgte systemanropet på Ubuntu 20.04 Linux -system. Koden skal fungere på alle distribusjonene til Linux likt og riktig. Håper du synes denne artikkelen er enkel å implementere og forstå.