C Programiranje

Kako uporabljati sistemski klic ankete v jeziku C

Kako uporabljati sistemski klic ankete v jeziku C
Funkcija poll () omogoča programom multipleksiranje vnosa in izhoda skozi vrsto deskriptorjev datotek. Z drugimi besedami, sistemski klic poll () je analogen delujočemu sistemskemu klicu select (), saj sproži ogenj za enega od več deskriptorjev datotek, tako da postane na voljo za V / I. Anketa () preuči dodeljeni deskriptor dokumenta za seznam dogodkov v incidentih do vseh elementov polja, ki nanj kažejo deskriptorji datotek. Metoda poll () lahko določi, kateremu od deskriptorjev datotek bo program prebral ali zapisal podrobnosti, kdo je videl te dogodke. V tem priročniku bomo uporabljali Ubuntu 20.04, da korak za korakom razumemo koncept sistemskega klica poll () v Linuxu.

Sintaksa:

int anketa (struct pollfd * ufds, unsigned int nfds, int timeout);

Argument "fds" določa deskriptorje dokumentov, ki jih je treba preveriti, in primere, pomembne za vsakega. To je sklic na matriko, ki ima en element za vsak deskriptor odprtega dokumenta. Elementi polja so strukture pollfd, kjer fd označuje odprti deskriptor dokumenta, vsi dogodki in ponovni dogodki, ki se običajno imenujejo bitne maske, pa se ustvarijo z združevanjem ustreznih zastavic dogodkov:

POLLIN:

Poleg visoko prioritetnih podatkov lahko preberemo tudi podatke, ki jih sploh ne moremo blokirati. Če je odzivno sporočilo nič velikosti, se ta signal zastavice ustvari za STREAMS v reventih. Ta zastava ima enak pomen kot POLLRDNORM | POLLRDBAND.

POLLRDNORM:

Brez prekinitve je mogoče odčitati običajne informacijske podatke. Informacije o primarnem prednostnem pasu 0 lahko preberemo kljub prekinitvam za STREAMS. Če je odzivno sporočilo ničelne dolžine, se ta signal generira v ponovnih dogodkih.

POLLRDBAND:

Podatki o glavni težavi se bodo prebrali, kljub zamudam. Informacije o obsegih prednosti, večjih od nič, je mogoče prebrati kljub poseganju v STREAMS. In če je odziv sporočila nič trajajoč, se ta signal širi v reventih.

POLLPRI:

Pri deskriptorju dokumenta so lahko nekatere izjeme. Informacije z najvišjo prioriteto lahko preberemo, če jih ne blokiramo. Če je odziv nič trajajoč, se ta signal širi za STREAMS v reventih.

GLEDE:

Uporabniki lahko izpišejo z zastavico POLLOUT. Tipične podatke lahko zapišemo brez ustavljanja. Informacije o prednostnem pasu 0 je mogoče posneti kljub prekinitvi v STREAMS.

POLLWRNORM:

Deluje enako kot POLLOUT.

POLLWRBAND:

Najbolj prednostni podatki bodo zapisani s to zastavico. Podatke o razponih preferenc, večjih od nič za STREAMS, je mogoče posneti, ne da bi jih blokirali. Ta dejavnost ocenjuje samo pasove, v katere je bilo vsaj enkrat že zapisano, ker na tem STREAMU ni zapisan noben preferenčni pas.

POLLERR:

Gre za pogoj napake in se pojavi le, če je sistem ali tok naletel na težavo. Ta simbol velja samo za zaščitno bitno masko; med udeleženci dejavnosti je spregledan.

POLLHUP:

Določa stanje prekinitve in nastopi šele, ko je povezava s sistemom onemogočena. Ta pojav in POLLOUT sta enako združljiva; ko se pojavi težava, tok nikoli ne bo napisan.

POLLNVAL:

To določa neveljavno ali nenavadno zahtevo. Ta dejavnost kljub temu ne izključuje sodelovanja v POLLIN, POLLRDNORM, POLLRDBAND ali POLLPRI. Ta simbol velja samo za zaščitno bitno masko; pri udeležencu dogodka je spregledan.

Primer sistemskega klica ankete:

Opravlja enako vlogo kot select (), čeprav v večjem obsegu. Anketa () je na voljo na katerem koli računalniku Linux s sistemom Glibc. Starejša jedra posnemajo anketo () z select () v celotni knjižnici C. Vendar programov ne bi bilo treba razlikovati. Tu je primer, kako se počuti anketa (). Torej najprej odprite terminal ukazne vrstice s tipko za bližnjico »Ctrl + Alt + T.”Po odprtju moramo ustvariti datoteko tipa C, da vanjo vpišemo kodo tipa C. Za to uporabljamo urejevalnik nano. Torej, preizkusite spodnji ukaz nano v terminalu skupaj z imenom datoteke C.

$ nano novo.c

Zdaj je bil odprt urejevalnik nano za datoteko C »novo«. Vanj morate najprej vključiti nekaj knjižnic, še posebej „anketo.h ”knjižnico. Za glavno funkcijo je bilo določeno, da ima celovrstni tip vrnitve z dvema argumentoma v svojem parametru, npr.g., argc in argv. Nato smo razglasili datotečni deskriptor fd in vrsto znakovnih nizov z imenom "buf.”Po tem je bila definirana spremenljivka tipa strukture z imenom pollfd pfds velikosti 2. Nato je bil razglašen odprt sistemski klic, da dobi vrednost iz polja tipa znakov in jo dodeli deskriptorju datoteke "fd", kot je prikazano na sliki. Medtem ko je deskriptor datoteke "1", bo struktura "pfds" posodobljena z nekaj podatki v njej z uporabo zastavice POLLIN v njej. Zdaj smo definirali funkcijo sistemskega klica poll (). Prvi parameter sistemskega klica poll () je struktura ufds, uporabljena v kodi. Drugi parameter določa vsoto struktur pollfd v seriji fds.

In zadnji parameter prikazuje vrednost časovne omejitve celotnega tipa za sistemski klic ankete. Če so pfds odkriti in dodani z vrednostjo 0, bo sistemski klic za branje prebral podatke iz vmesnega pomnilnika. Stavek "če" bo uporabljen za preverjanje, ali je branje stavka vrnilo svojo vrednost v celo število in zapisovanje podatkov. Če je struktura »pfds« med odvzemom in vnosom podatkov na položaju »1«, bo sistemski klic za branje uporabil podatke iz vmesnega pomnilnika, medtem ko uporablja deskriptor »fd«.

Shrani novo.c datoteko in jo zaprite. Zdaj ga prevedite s pomočjo prevajalnika gcc.

$ gcc novo.c

Med izvajanjem te kode smo v anketo dodali podatke, ki jih je treba prebrati, in spet zapiše podatke kot v spodnjem izhodu.

$ ./ a.ven

Zaključek:

V tem zgoraj opisanem članku smo razpravljali o sistemskem klicu poll () v jeziku C. Upam, da vam je ta vadnica koristna in učinkovita med delom v operacijskem sistemu Linux.

OpenTTD vs Simutrans
Ustvarjanje lastne simulacije prevoza je lahko zabavno, sproščujoče in izjemno vabljivo. Zato morate preizkusiti čim več iger, da boste našli tisto, k...
Vadnica za OpenTTD
OpenTTD je ena izmed najbolj priljubljenih poslovnih simulacijskih iger. V tej igri morate ustvariti čudovit prevozniški posel. Vendar boste začeli na...
SuperTuxKart za Linux
SuperTuxKart je odličen naslov, zasnovan tako, da vam brezplačno ponuja izkušnjo Mario Kart v vašem sistemu Linux. Igrati je precej zahtevno in zabavn...