C programozás

Hogyan használjuk a szavazó rendszerhívást a C-ben

Hogyan használjuk a szavazó rendszerhívást a C-ben
A poll () funkció lehetővé teszi a programok számára, hogy multiplexeljék a be- és kimenetet a fájlleírók sorozatán keresztül. Más szavakkal, a poll () rendszerhívás analóg a () rendszerhívással a működés során, mivel az I / O számára elérhetővé válva több fájlleíró egyikében lángra kap. A Poll () megvizsgálja a hozzárendelt dokumentumleírót az esemény (ek) eseményekben való felsorolásához a tömb minden elemére, amely fájlleírókkal mutat rá. A poll () metódus meghatározhatja, hogy a program mely fájlleírók közül olvasson vagy írjon részleteket, akik látták ezeket az eseményeket. Ebben az útmutatóban az Ubuntu 20-at fogjuk használni.04 a poll () rendszerhívás fogalmának megértéséhez lépésről lépésre.

Szintaxis:

int poll (struct pollfd * ufds, előjel nélküli int nfds, int timeout);

Az „fds” argumentum határozza meg az ellenőrizni kívánt dokumentumleírókat, valamint az egyes esetek szempontjából jelentős eseményeket. Ez egy olyan tömbre való hivatkozás, amely minden nyitott dokumentumleíróhoz egy elemet tartalmaz. A tömb elemei pollfd struktúrák, ahol az fd egy nyitott dokumentumleírót jelöl, és az összes eseményt és újbóli eseményt, általában bitmaszknak hívják, a megfelelő eseményzászlók összevonásával hozzák létre:

POLLIN:

A kiemelt fontosságú adatokon kívül az információs adatok ki is olvashatók anélkül, hogy akár blokkolódnának is. Továbbá, ha a válaszüzenet nulla méretű, akkor ez a jelzőjel a STREAMS számára generálódik a reventsben. Ennek a zászlónak jelentése ugyanaz, mint a POLLRDNORM | POLLRDBAND.

POLLRDNORM:

Megszakítás nélkül a hétköznapi információi adatok kiolvashatók. Az elsődleges prioritású 0. sávra vonatkozó információk a STREAMS megszakítása ellenére is olvashatók. És ha a válaszüzenet nulla hosszúságú, akkor ez a jel újból bekövetkezik.

POLLRDBAND:

Az elsődleges aggodalomra vonatkozó adatok kiolvasása annak ellenére történik, hogy késéseket okoznak. A nulla feletti prioritási tartományokról szóló információk a STREAMS-ba való beavatkozás ellenére is olvashatók. Ha pedig az üzenetválasz nulla időtartamú, akkor ezt a jelet fordulatszámban továbbítják.

POLLPRI:

A dokumentumleírónál lehet néhány kivétel. A kiemelt fontosságú információkat le lehet tiltani a blokkolástól. Továbbá, ha a válasz nulla időtartamú, akkor ezt a jelet az ÁRAMOK számára terjesztik a fordulóban.

SZennyeződés:

A felhasználók kiírhatják a POLLOUT zászlóval. A leállástól eltekintve tipikus adatok rögzíthetők. A 0. preferencia sávra vonatkozó információk rögzíthetők a STREAMS megszakítása ellenére is.

POLLWRNORM:

Ugyanúgy működik, mint a POLLOUT.

FÉNYKAPCSOLÓ:

A legfontosabb prioritású adatokat ezzel a zászlóval írjuk. A STREAMS nulla feletti preferencia tartományokra vonatkozó információk blokkolás nélkül rögzíthetők. Ez a tevékenység csak azokat a sávokat értékeli, amelyekre már legalább egyszer írtak, mivel a STREAM-ra nem írtak preferencia sávot.

POLLERR:

Ez hibaállapot, és csak akkor fordul elő, ha a rendszer vagy a folyamat problémába ütközik. Ez a szimbólum csak a megújuló bitmaszkra vonatkozik; a tevékenység résztvevője figyelmen kívül hagyja.

SZENNYEZÉS:

Megadja a letiltási feltételt, és csak akkor fordul elő, ha a rendszerhez való csatlakozást letiltották. Ez az előfordulás és a POLLOUT egyaránt kompatibilis; ha felmerült egy probléma, soha nem fog folyamot írni.

POLLNVAL:

Ez az érvénytelen vagy szokatlan kérést határozza meg. Ez a tevékenység mindazonáltal nem zárja ki a POLLIN, POLLRDNORM, POLLRDBAND vagy POLLPRI részvételt. Ez a szimbólum csak a megújuló bitmaszkra vonatkozik; az esemény résztvevője figyelmen kívül hagyja.

Példa a szavazó rendszer hívására:

Ugyanazon szerepet tölti be, mint a select (), bár nagyobb léptékben. A Poll () bármely Glibc alapú Linux gépen elérhető. A régebbi kernelek a C () könyvtárban a poll () és a select () kifejezéseket utánozzák. A programoknak azonban nem kell különbséget tenniük. Íme egy példa a közvélemény-kutatás () érzésére. Tehát először nyissa meg a parancssori terminált a „Ctrl + Alt + T billentyűparancs segítségével.”Megnyitás után létre kell hoznunk egy C típusú fájlt, amelybe C típusú kódot írunk. Ehhez a nano szerkesztőt használtuk. Tehát próbálja ki az alábbi nano parancsot a terminálban a C fájl nevével együtt.

$ nano új.c

Most megnyílt a „new” C fájl nano szerkesztője. Először be kell foglalnia néhány könyvtárat, különösen a „közvélemény-kutatást.h ”könyvtár. A fő függvény úgy lett megadva, hogy egy egész visszatérési típussal rendelkezik, paraméterében két argumentum van, pl.g., argc és argv. Ezután deklaráltuk az fd fájlleírót és a „buf.”Ezt követően egy struktúra típusú változót definiáltunk, amelynek neve pollfd pfds, 2-es méretű. Ezután egy nyílt rendszerhívást deklaráltunk, hogy megszerezzük az értéket a karaktertípus tömbből, és hozzárendeljük a képen látható „fd” fájlleíróhoz. Míg a fájlleíró „1”, a „pfds” struktúra néhány adattal frissül benne a POLLIN jelző használatával. Most definiáltunk egy poll () rendszerhívás funkciót. A poll () rendszerhívás első paramétere a kódban használt ufds struktúra. A második paraméter meghatározza a pollfd struktúrák teljes számát az fds sorozatban.

Az utolsó paraméter pedig a lekérdezési rendszer hívásának egész típusú időtúllépési értékét mutatja. Ha a pfds revent és 0 értékkel egészül ki, akkor az olvasott rendszerhívás kiolvassa az adatokat a pufferből. Az „if” utasítással ellenőrizzük, hogy az olvasott utasítás visszaadta-e az egész értékét, és írjon-e adatokat. Ha az „pfds” struktúra az „1” pozícióban van, miközben az adatokat megismétli és beírja, az olvasott rendszerhívás a puffer adatait használja az „fd” leíró használata közben.

Mentsd el az újat.c fájlt, és zárja be. Most fordítsa le a gcc fordítóval.

$ gcc new.c

A kód futtatása közben felvettünk egy adatot egy felmérésbe, amelyet fel kell olvasni, és az adatokat újra írja, az alábbi kimenethez hasonlóan.

$ ./ a.ki

Következtetés:

Ebben a fent leírt cikkben megvitattuk a poll () rendszerhívást C nyelven. Remélem, hogy ezt az oktatóanyagot hasznosnak és hatékonynak találja a Linux operációs rendszeren való munka közben.

Az Xdotool használata az egérkattintások és a billentyűleütések ösztönzéséhez Linux alatt
Az Xdotool egy ingyenes és nyílt forráskódú parancssori eszköz az egérkattintások és a billentyűleütések szimulálására. Ez a cikk egy rövid útmutatót ...
A top 5 ergonómikus számítógépes egértermék Linuxhoz
Hosszan tartó számítógép-használat okoz-e fájdalmat a csuklóján vagy az ujjain?? Merev ízületek szenvednek, és folyamatosan kezet kell rázniuk? Égő fá...
Az egér és az érintőpad beállításainak módosítása az Xinput használatával Linux alatt
A legtöbb Linux disztribúció alapértelmezés szerint „libinput” könyvtárral szállítja a rendszer bemeneti eseményeit. Feldolgozhatja a Wayland és az X ...