C Programmering

Sådan bruges Vælg systemopkald i C

Sådan bruges Vælg systemopkald i C
Systemopkaldet select () gør det muligt for et system at holde styr på flere filbeskrivelser. Så det valgte systemopkald venter på, at en af ​​deskriptorerne eller en helhed viser sig at være "klar" til en bestemt type I / O-aktivitet (e.g., input mulig). Hvis den efterfølgende I / O-proces (e.g., læse (2)) kan udføres på trods af blokering, anses filbeskrivelsen for at være i stand. Select () -metoden beskriver, om en dokumentbeskrivelse er tilgængelig til læsning, klar til skrivning eller i en undtagelsestilstand. Antag, at den angivne situation er falsk for helt de angivne filbeskrivere. I så fald er de valgte () systemopkaldsblokke før de nævnte omstændigheder gyldige i mindst en af ​​de angivne dokumentbeskrivere, svarende til det angivne interval for timeout.

Eksempel på Vælg systemopkald:

Lad os have et simpelt eksempel for at tjekke, hvordan det valgte systemopkald fungerer. Åbn kommandolinjeskallen ved hjælp af "Ctrl + Alt + T.”Efter terminalens åbning skal du sørge for at have en C-sprogcompiler installeret på dit system, fordi koden ikke fungerer uden den. Hvis du ikke har en, så prøv nedenstående kommando for at gøre det.

$ sudo apt installere gcc

Hvis du vil se, at Linux vælger systemopkald fungerer, skal du have manpages-dev-pakken installeret på dit system i henhold til nedenstående kommando. Skriv din brugeradgangskode for at fortsætte.

$ sudo apt install manpages-dev

Du kan se syntaksen og funktionen af ​​udvalgte systemopkald ved hjælp af nedenstående "mand" -kommando.

$ man 2 vælg

Outputman-siden for det valgte systemopkald er vist nedenfor. Afslut det ved at trykke på “q” -tasten.

Standardmapper, kommandoskalterminal og pseudoterminalapplikationer, STREAMS-centrerede dokumenter, FIFO'er, inklusive rør, understøttes alle af select () -modulet. Aktiviteten af ​​select () på dokumentbeskrivere, der henviser til disse andre filformater, er ukendt. Så nedenfor er forklaringen på Vælg systemopkald.

Beskrivelsen af ​​syntaksen vist i ovenstående billede er beskrevet nedenfor.

Ovenfor er biblioteket, der skal medtages i C-koden, mens du bruger det valgte systemopkald. Hvis den ikke er inkluderet, fungerer koden ikke.

Det nfds erklæring definerer det filbeskrivelsessæt, der evalueres. Metoden select () kontrollerer filbeskrivelser mellem 0 og nfds-1.

Mens readfds er ikke nul, det henviser til en matrix af form fd_set, der definerer, hvilke dokumentbeskrivere der skal testes for at være klar til at læse på input, og hvilke dokumentbeskrivere skal være indstillet til at læse på output.

Når skrivefds parameteren er ikke tom, den henviser til en enhed med formularen fd_set, der definerer, hvilke dokumentbeskrivere der skal testes for at være klar til at skrive på input. Dokumentbeskrivelserne skal være forberedt til at komponere på output.

Mens errorfds parameteren er ikke tom, den henviser til et objekt af typen fd_set, der bestemmer, hvilke dokumentbeskrivere der skal testes for at afvente fejltilstand ved input; også dokumentbeskrivere skal verificeres ved output.

Readfds-, Writhefds- og Errorfds-parametrene opdateres efter gennemførelse for at betegne, at dokumentbeskrivere er forberedt på at have læst, fuldt klargjort til skrivning eller endda har en undtagelsestilstand, der venter i overensstemmelse hermed. Hvis den efterfølgende bit er fast på input, og den relevante situation er gyldig for hver filbeskrivelse lidt under nfds, vil den efterfølgende bit blive placeret på effektiv gennemførelse.

Mens timeout-parameteren ikke rigtig er tom, fører den til en tidsmæssig enhed, der bestemmer den højeste tid til at holde din ild for valget at afslutte. Select () forhindrer ikke helt, hvis en sådan timeout-parameter fører til et strukturelt tidsobjekt med 0 elementer. Vælg () stopper, medmindre en forekomst gør det muligt at hente et af filtrene med et sandt (ikke-nul) resultat, uanset om timeout-sætningen er en tom reference. Vælg () lykkes effektivt og producerer 0, når venteperioden slutter, selv før forekomst sker, hvilket muligvis kræver, at en af ​​flere masker justeres til en værdi, der ikke er nul.

Denne makro fjerner samlingen (sletter alle dokumentbeskrivere). Det kan bruges som det allerførste træk i initialisering af en dokumentbeskrivelsessamling.

Dokumentbeskrivelsen fd føjes til samlingen af ​​denne makro. Brug af en dokumentbeskrivelse til en samling, der allerede har eksisteret, ville ikke fungere og resulterer derfor ikke i en undtagelsesfejl.

Dokumentbeskrivelsen fd fjernes fra samlingen af ​​denne makro. En filbeskrivelse, der er fjernet fra samlingen, og som ikke findes, er ikke-operationel og resulterer derfor ikke i en undtagelse.

Det valgte () systemopkald ændrer informationen eller dataene i samlingerne i henhold til ovennævnte regler. FD ISSET () makroen kan kastes ved at påkalde select () for at se, om en dokumentbeskrivelse forbliver tilgængelig i en samling.

Lad os oprette en ny C-fil med navnet “ny.c ”som nedenfor.

$ nano nyt.c

GNU-editoren er blevet åbnet. Skriv nedenstående kode i den. Koden indeholder overskrifter, hovedfunktion med nogle filbeskrivelser som beskrevet ovenfor. Den indeholder også en struktur for tidsintervalværdien. Derefter har vi brugt det valgte systemopkald til at kontrollere for fejlen i "hvis" -sætningen. Tryk på "Ctrl + S" for at gemme denne kode og "Ctrl + X" fra at afslutte editoren.

Kompiler nu koden ved hjælp af "gcc" instruktion.

$ gcc nyt.c

Kør koden og tilføj ikke noget input. Outputtet siger "vælg timeout.”

$ ./en.ud

Igen skal du køre koden og give noget input i terminalen, f.eks.g., “Aqsa.”Det vil output, at“ data er tilgængelige.”

Konklusion:

Vi har implementeret det valgte systemopkald på Ubuntu 20.04 Linux-system. Koden skal fungere på alle distributioner af Linux lige og korrekt. Håber du finder denne artikel let at implementere og forstå.

Bedste apps til Gamepad Mapping til Linux
Hvis du kan lide at spille spil på Linux med en gamepad i stedet for et typisk tastatur- og musesystem, er der nogle nyttige apps til dig. Mange pc-sp...
Nyttige værktøjer til Linux-spillere
Hvis du kan lide at spille spil på Linux, er chancerne for, at du måske har brugt apps og hjælpeprogrammer som Wine, Lutris og OBS Studio for at forbe...
HD Remastered-spil til Linux, der aldrig tidligere havde haft en Linux-udgivelse
Mange spiludviklere og udgivere kommer med HD-remaster af gamle spil for at forlænge franchisens levetid. Venligst fans, der anmoder om kompatibilitet...