C Programmeerimine

Kuidas kasutada küsitlussüsteemi kõnet C-s

Kuidas kasutada küsitlussüsteemi kõnet C-s
Funktsioon poll () võimaldab programmidel failide kirjeldajate seeria kaudu multipleksida sisendit ja väljundit. Teisisõnu, küsitluse () süsteemikõne on analoogne töötamise süsteemikõne valimisega, kuna see hoiab tulekahju mitme failikirjeldaja jaoks, muutudes I / O jaoks kättesaadavaks. Poll () uurib määratud dokumendikirjeldit sündmuste (sündmuste) loetlemiseks intsidentides massiivi igale elemendile, mis sellele faili kirjeldajate abil osutab. Meetod poll () saab määrata, millistele failikirjuritest programm neid üksikasju loeb või neile kirjutab, kes on neid juhtumeid näinud. Selles juhendis kasutame Ubuntu 20.04 mõista küsitluse () süsteemi kõne mõistet Linuxi samm-sammult.

Süntaks:

int poll (struct pollfd * ufds, signeerimata int nfds, int timeout);

Argument “fds” määrab kontrollitavad dokumendikirjeldajad ja nende jaoks olulised juhtumid. See viitab kas massiivile, millel on iga avatud dokumendi kirjeldaja jaoks üks element. Massiivi elemendid on pollfd struktuurid, kus fd tähistab avatud dokumendi kirjeldajat ning kõik sündmused ja uuesti toimuvad sündmused, mida tavaliselt nimetatakse bitimaskideks, genereeritakse vastavate sündmuste lippude liitmise abil:

POLLIN:

Peale esmatähtsate andmete võib teabe andmeid välja lugeda, ilma et need oleksid isegi blokeeritud. Kui vastussõnum on nullsuurune, genereeritakse see lipusignaali voogude jaoks voogudes. Sellel lipul on sama tähendus nagu POLLRDNORM | VÕIMALIK.

POLLRDNORM:

Ilma katkestusteta saab tavalisi teabeandmeid välja lugeda. Teavet esmatähtsa probleemiriba 0 kohta saab lugeda vaatamata STREAMS-i katkestamisele. Ja kui vastuseteate pikkus on null, genereeritakse see signaal uuesti sündmustes.

VÕIMALIK:

Peamise murega seotud andmed loetakse ette viivitustest hoolimata. Teavet prioriteedivahemike kohta, mis on suuremad kui null, saab lugeda vaatamata STREAMS-i sekkumisele. Ja kui sõnumivastuse kestus on null, levitatakse seda signaali pööretes.

POLLPRI:

Dokumendi kirjeldajal võib olla mõningaid erandeid. Esmatähtsat teavet saab blokeerimisest ilma jätta. Samuti, kui vastuse kestus on null, levitatakse seda signaali voogudes voogudes.

SAASTE:

Kasutajad saavad välja kirjutada lipu POLLOUT abil. Peatumisest ei saa enam andmeid salvestada. Teavet eelistusriba 0 kohta saab salvestada vaatamata STREAMS-i katkestusele.

POLLWRNORM:

See töötab samamoodi nagu POLLOUT.

VÕTMERIBA:

Kõige olulisemad andmed kirjutatakse selle lipu abil. Teavet eelistuste vahemike kohta, mis on suuremad kui STREAMS, saab salvestada ilma blokeerimiseta. See tegevus hindab ainult neid ribasid, millele on juba vähemalt üks kord kirjutatud, kuna sellele STREAM-ile pole kirjutatud ühtegi eelistusriba.

POLLERR:

See on veatingimus ja ilmneb ainult siis, kui süsteem või voog on probleemiga kokku puutunud. See sümbol kehtib ainult uuendatud bitmaski kohta; kogu tegevuses osaleja on see tähelepanuta jäetud.

POLLHUP:

See määrab katkestustingimuse ja toimub ainult siis, kui süsteemiga ühenduse loomine on keelatud. See esinemine ja POLLOUT sobivad võrdselt; kui probleem on tekkinud, ei kirjutata voogu enam kunagi.

POLLNVAL:

See määrab kehtetu või ebatavalise taotluse. See tegevus ei välista siiski osalemist programmides POLLIN, POLLRDNORM, POLLRDBAND ega POLLPRI. See sümbol kehtib ainult uuendatud bitmaski kohta; see jääb üritusel osalejal kahe silma vahele.

Näide küsitlussüsteemi kõnest:

See täidab sama rolli kui select (), ehkki suuremas mahus. Küsitlus () on saadaval igas Glibc-põhises Linuxi masinas. Vanemad tuumad jäljendavad küsitlust () valimisega () kogu C-i raamatukogus. Programmid ei peaks siiski vahet tegema. Siin on näide küsitluse () tundest. Nii avage kõigepealt käsureaterminal, kasutades kiirklahvi „Ctrl + Alt + T.”Pärast selle avamist peame looma C-tüüpi faili, kuhu C-tüüpi kood sinna kirjutada. Selleks oleme kasutanud nano-redaktorit. Niisiis, proovige terminalis allpool olevat nano-käsku koos C-faili nimega.

$ nano uus.c

Nüüd on C-faili „uus“ nano-redaktor avatud. Kõigepealt peate sellesse kaasama mõned raamatukogud, eriti „küsitlus.h ”raamatukogu. Põhifunktsiooniks on määratud täisarvu tagasitüüp, mille parameetris on kaks argumenti, nt.g., argc ja argv. Siis oleme kuulutanud failikirjeldaja fd ja tähemärgi massiivi nimega “buf.”Pärast seda on määratletud struktuuri tüübi muutuja nimega pollfd pfds suurusega 2. Järgmisena on deklareeritud avatud süsteemikõne, et saada väärtus tähemärgi massiivilt ja määrata see faili kirjeldajale "fd", nagu pildil näha. Kuigi failikirjeldaja on „1“, värskendatakse struktuuri „pfds“ selles sisalduvate andmetega, kasutades selles olevat lippu POLLIN. Nüüd oleme määranud poll () süsteemi kõne funktsiooni. Küsitluse () süsteemikõne esimene parameeter on koodis kasutatav ufds-struktuur. Teine parameeter määrab fds-seerias pollfd-struktuuride koguarvu.

Ja viimane parameeter näitab küsitlussüsteemi kõne täisarvutüüpi ajalõpu väärtust. Kui pfds on revents ja lisatakse väärtusega 0, loeb loetud süsteemikõne andmed puhvrist välja. Lauset “if” kasutatakse selleks, et kontrollida, kas loetud lause on andnud oma väärtuse täisarvu ja kirjutab andmeid. Kui struktuur "pfds" on andmete taastamise ja sisestamise ajal positsioonil "1", kasutab loetud süsteemikõne puhvri andmeid kirjeldava "fd" kasutamise ajal.

Salvestage uus.c fail ja sulgege see. Nüüd kompileerige see kompilaatori gcc abil.

$ gcc uus.c

Selle koodi käivitamise ajal lisasime küsitlusse andmed, mida lugeda, ja see kirjutab andmed uuesti nagu allpool toodud väljundis.

$ ./ a.välja

Järeldus:

Selles ülalkirjeldatud artiklis oleme arutanud poll () süsteemi kõnet C-keeles. Loodetavasti leiate, et see õpetus on Linuxi operatsioonisüsteemiga töötamise ajal kasulik ja tõhus.

OpenTTD vs Simutrans
Oma transpordisimulatsiooni loomine võib olla lõbus, lõõgastav ja äärmiselt köitev. Sellepärast peate endale meelepärase leidmiseks kindlasti proovima...
OpenTTD õpetus
OpenTTD on seal üks populaarsemaid ärisimulatsioonimänge. Selles mängus peate looma suurepärase transpordiettevõtte. Alustate siiski alguses umbes 190...
SuperTuxKart Linuxile
SuperTuxKart on suurepärane pealkiri, mis on loodud selleks, et tuua teie Linuxi süsteemis tasuta Mario Karti kogemus. See on päris keeruline ja lõbus...