Hvordan du bruker avstemningssystemanrop i C

Hvordan du bruker avstemningssystemanrop i C
Poll () -funksjonen lar programmer multiplex -inngang og utdata gjennom en serie filbeskrivelser. Med andre ord, meningsmåling () systemanrop er analogt med å velge () systemanrop i å fungere, da det holder ilden sin for en av flere filbeskrivelser ved å bli tilgjengelig for I/O. POLL () undersøker den tildelte dokumentbeskrivelsen for oppføring av hendelsen (e) i hendelser til hvert element i matrisen som peker på det med filbeskrivelser. Poll () -metoden kan bestemme hvilken av filbeskrivelsene et program vil lese eller skrive detaljer til, som har sett disse hendelsene. I denne guiden bruker vi Ubuntu 20.04 for å forstå konseptet med avstemning () systemanrop på Linux trinn for trinn.

Syntaks:

int -avstemning (struct pollfd *ufds, usignert int nfds, int timeout);

"FDS" -argumentet bestemmer dokumentbeskrivelsene som skal sjekkes, så vel som hendelsene med betydning for hver. Det er en referanse til enten en matrise som har ett element for hver åpen dokumentbeskrivelse. Arrayens elementer er POLLFD-strukturer, der FD betegner en åpen dokumentbeskrivelse, og alle hendelser og gjenstander, vanligvis kalt Bitmasks, genereres ved å lage en sammenslåing av de tilsvarende hendelsesflaggene:

Pollin:

Bortsett fra data med høy prioritet, kan informasjonsdata leses ut fratatt til og med å bli blokkert. Hvis svarmeldingen er i null størrelser, genereres dette flaggsignalet for strømningene i Revents. Dette flagget har samme betydning som Pollrdnorm | Pollrdband.

Pollrdnorm:

Uten avbrudd kan vanlige informasjonsdata være lesning. Informasjon om primærprioritet Bekymringsbånd 0 kan leses til tross for avbrudd for strømmer. Og hvis svarmeldingen er av null lengde, genereres dette signalet i re-events.

Pollrdband:

Primær bekymringsdata vil bli lest opp til tross for at de forårsaker forsinkelser. Informasjon om prioriterte områder som er større enn null, kan leses til tross for at du forstyrrer strømmer. Og hvis meldingsresponsen er av null varighet, blir dette signalet forplantet i Revents.

Pollpri:

Det kan være noen unntak fra dokumentbeskrivelsen. Informasjon med topp prioritet kan leses fratatt å bli blokkert. Hvis responsen er null varighet, blir dette signalet forplantet for strømmer i Revents.

POLLOUT:

Brukere kan skrive ut ved hjelp av pollout -flagget. Fratatt stopp, kan typiske data registreres. Informasjon om preferansebånd 0 kan registreres til tross for avbruddet i strømmer.

Pollwrnorm:

Det fungerer det samme som Pollout.

POLLWRBAND:

De mest prioriterte dataene vil bli skrevet ved hjelp av dette flagget. Informasjon om preferanseområder større enn null for strømmer kan registreres uten å bli blokkert. Denne aktiviteten evaluerer bare band som allerede er skrevet til minimum en gang siden det er skrevet noe preferansebånd på denne strømmen.

Pollerr:

Det er en feiltilstand og bare oppstår når systemet eller strømmen har opplevd et problem. Dette symbolet gjelder bare Revents Bitmask; Gjennom hele aktivitetsdeltakeren blir den oversett.

POLLHUP:

Den spesifiserer hang-up-tilstanden og oppstår bare når forbindelsen til systemet er deaktivert. Denne forekomsten og avstemmingen er like kompatible; Når et problem har oppstått, vil det aldri bli skrevet en strøm.

PollnVal:

Dette spesifiserer ugyldig eller uvanlig forespørsel. Denne aktiviteten utelukker likevel ikke deltakelse i pollin, pollrdnorm, pollrdband eller pollpri. Dette symbolet gjelder bare Revents Bitmask; Det blir oversett i deltakeren i arrangementet.

Eksempel på avstemningssystemanrop:

Den utfører den samme rollen som Select (), selv om det er i større skala. Poll () er tilgjengelig på en hvilken som helst glibc-basert Linux-maskin. De eldre kjernene etterligner avstemningen () med Select () i hele C -biblioteket. Programmer må imidlertid ikke trenge å skille. Her er et eksempel på hvordan avstemningen () føles som. Så åpne kommandolinjeterminalen først ved å bruke snarveisnøkkelen “Ctrl+Alt+T.”Etter å ha åpnet den, må vi opprette en C-type fil for å skrive en C-type kode i den. For dette har vi brukt Nano Editor. Så prøv ned nedenfor Nano -kommandoen i terminalen sammen med navnet på C -filen.

$ nano ny.c

Nå er Nano -redaktøren for C -filen “New” blitt åpnet. Du må først inkludere noen biblioteker i det, spesielt "avstemningen.H ”bibliotek. Hovedfunksjonen er spesifisert som å ha en heltallsreturstype med to argumenter i parameteren, e.g., Argc og Argv. Da har vi erklært en filbeskrivende FD og en karaktertype -matrise som heter “BUF.”Etter det er en strukturtypevariabel blitt definert kalt POLLFD PFDS i størrelse 2. Deretter er det erklært en åpen systemanrop for å få verdien fra karaktertypen og tilordne den til filbeskrivelsen “FD” som sett på bildet. Mens filbeskrivelsen er “1”, vil strukturen “PFDS” bli oppdatert med noen data i den ved å bruke pollinflagget i den. Nå har vi definert en avstemning () systemanropsfunksjon. Den første parameteren for avstemningen () systemanrop er UFDS -strukturen som brukes i koden. Den andre parameteren spesifiserer summen av POLLFD -strukturer i FDS -serien.

Og den siste parameteren viser tidsavbruddsverdien for heltallstype for avstemningssystemet. Hvis PFD -ene er avsetninger og lagt til med en verdi av 0, vil lesesystemanropet lese opp dataene fra bufferen. "IF" -uttalelsen vil bli brukt til å sjekke om leseuttalelsen har returnert verdien til et heltall og skrive data. Hvis strukturen “PFDS” er i posisjon “1” mens du gjenopptar og legger inn dataene, vil lesesystemanropet bruke dataene fra en buffer mens du bruker “FD” -beskrivelsen.

Lagre det nye.c fil og lukk den. Nå kompilere den ved hjelp av GCC -kompilatoren.

$ GCC NY.c

Mens vi utførte denne koden, la vi til data i en avstemning som skal leses opp, og den skriver data igjen som i utdataene nedenfor.

$ ./en.ute

Konklusjon:

I denne ovenfor beskrevne artikkelen har vi diskutert avstemning () systemanrop på C-språket. Jeg håper du synes denne opplæringen er nyttig og effektiv mens du jobber med Linux -operativsystemet.