Eksempel på Velg systemanrop:
La oss ha et enkelt eksempel for å sjekke ut funksjonen til utvalgte systemanrop. Åpne kommandolinjeskallet ved å bruke “Ctrl + Alt + T.”Etter terminalåpningen, må du kontrollere at du har en C-språk kompilator installert på systemet ditt fordi koden ikke fungerer uten den. Hvis du ikke har en, kan du prøve kommandoen nedenfor for å gjøre det.
$ sudo apt installere gcc
Hvis du vil se at Linux-valg av systemanrop fungerer, 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 syntaksen og virkemåten til utvalgte systemanrop ved å bruke kommandoen "mann" nedenfor.
$ mann 2 velg
Utgangssiden for det valgte systemanropet er vist nedenfor. Avslutt ved å trykke på “q” -tasten.
Standard kataloger, kommandoterminal og pseudo-terminal applikasjoner, STREAMS-sentrerte dokumenter, FIFOer, inkludert rør, støttes alle av select () -modulen. Aktiviteten til select () på dokumentbeskrivere som refererer til disse andre filformatene, er ukjent. Så nedenfor er forklaringen på Select system call.
Beskrivelsen av syntaksen vist i bildet ovenfor er beskrevet nedenfor.
Ovenfor er biblioteket som skal inkluderes i C-koden mens du bruker det valgte systemanropet. Hvis den ikke er inkludert, fungerer ikke koden.
De nfds uttalelse definerer filbeskrivelsessettet som skal evalueres. Select () -metoden sjekker filbeskrivelser mellom 0 og nfds-1.
Samtidig som readfds er ikke null, det refererer til et utvalg av skjema fd_set som definerer hvilke dokumentbeskrivere som skal testes for å være klar til å lese på inngang og hvilke dokumentbeskrivere som skal være satt til å lese på utdata.
Når skrivefds parameteren er ikke tom, den refererer til en enhet av skjemaet fd_set som definerer hvilke dokumentbeskrivere som skal testes for å være klar til å skrive på input. Dokumentbeskrivelsene bør være forberedt på å komponere på utdata.
Mens errorfds parameteren er ikke tom, den henviser til et objekt av typen fd_set, som bestemmer hvilke dokumentbeskrivere som skal testes for å avvente feiltilstand ved inngang; også dokumentbeskrivelsene skal verifiseres ved utdata.
Readfds, scriptefds og errorfds-parametrene oppdateres etter fullførelse for å betegne at dokumentbeskrivere er forberedt på å ha lest, fullt forberedt på å skrive, eller til og med har en unntakstilstand som venter, følgelig. Hvis den påfølgende biten er løst ved inngang, og den aktuelle situasjonen er gyldig for hver filbeskrivelse litt under nfds, vil den påfølgende biten bli plassert på effektiv oppnåelse.
Selv om tidsavbruddsparameteren ikke er tom, fører den til en tidsenhet i strukturen som bestemmer den høyeste tiden for å holde ilden for valget å fullføre. Select () hindrer ikke helt hvis en slik tidsavbruddsparameter fører til et tidsintervall i en struktur med 0 elementer. Velg () stopper med mindre en forekomst gjør at et av filtrene kan hentes med et sant (ikke-null) resultat, enten timeout-setningen er en tom referanse. Velg () lykkes effektivt og produserer 0 når ventetiden avsluttes før det skjer, noe som kan kreve at en av flere masker justeres til en verdi som ikke er null.
Denne makroen eliminerer samlingen (sletter alle dokumentbeskrivelsene). Den kan brukes som det aller første trekket i initialisering av en dokumentbeskrivelsessamling.
Dokumentbeskrivelsen fd er lagt til samlingen av denne makroen. Å bruke en dokumentbeskrivelse til en samling som allerede har eksistert, vil ikke fungere og resulterer derfor ikke i en unntaksfeil.
Dokumentbeskrivelsen fd fjernes fra samlingen av denne makroen. En filbeskrivelse som er eliminert fra samlingen som ikke eksisterer, er ikke-operativ og resulterer derfor ikke i et unntak.
Velg () systemanrop endrer informasjonen eller dataene til samlingene i henhold til reglene nevnt ovenfor. FD ISSET () -makroen kan kastes ved å påkalle select () for å se om en dokumentbeskrivelse forblir tilgjengelig i en samling.
La oss lage en ny C-type fil kalt “ny.c ”som nedenfor.
$ nano ny.c
GNU-redaktøren er åpnet. Skriv ut koden under. Koden inneholder overskrifter, hovedfunksjon med noen filbeskrivelser som beskrevet ovenfor. Den inneholder også en struktur for tidsintervallverdien. Så har vi brukt det valgte systemanropet for å se etter feilen i “if” -uttrykket. Trykk “Ctrl + S” for å lagre denne koden og “Ctrl + X” når du avslutter redigeringsprogrammet.
Nå kompilerer du koden ved å bruke "gcc" -instruksjonen.
$ gcc ny.c
Kjør koden og ikke legg til noen input. Utgangen vil si "velg tidsavbrudd.”
$ ./en.ute
Igjen, kjør koden og gi noen innspill i terminalen, f.eks.g., “Aqsa.”Det vil gi ut at“ dataene er tilgjengelige.”
Konklusjon:
Vi har implementert det valgte systemanropet på Ubuntu 20.04 Linux-system. Koden skal fungere på alle distribusjoner av Linux likt og riktig. Håper du synes denne artikkelen er enkel å implementere og forstå.