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