C Programmering

Hvordan bruke Velg systemanrop i C

Hvordan bruke Velg systemanrop i C
Velg () systemanrop gjør det mulig for et system å holde rede på flere filbeskrivelser. Så det valgte 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 / U-prosessen (e.g., lese (2)) kan utføres til tross for blokkering, er filbeskrivelsen ansett som i stand. Select () -metoden beskriver om en dokumentbeskrivelse er tilgjengelig for lesing, klargjort for skriving eller i unntakstilstand. Anta at den oppgitte situasjonen er falsk for helt de oppgitte filbeskrivelsene. I så fall er utvalgte () systemanropsblokker før de nevnte omstendighetene gyldige i minst en av de oppgitte dokumentbeskrivelsene, lik det angitte tidsavbruddsintervallet.

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å.

Beste spillkonsollemulatorer for Linux
Denne artikkelen vil liste opp populære programvare for spillkonsollemulering tilgjengelig for Linux. Emulation er et programvarekompatibilitetslag so...
Beste Linux Distros for spill i 2021
Linux-operativsystemet har kommet langt fra det originale, enkle, serverbaserte utseendet. Dette operativsystemet har forbedret seg enormt de siste år...
Hvordan fange opp og streame spilløkten din på Linux
Tidligere ble spill bare ansett som en hobby, men med tiden så spillindustrien en enorm vekst når det gjelder teknologi og antall spillere. Spillpubli...