C Programmering

Hur man använder Poll System Call i C

Hur man använder Poll System Call i C
Poll () -funktionen gör det möjligt för program att multiplexera in- och utdata genom en serie filbeskrivare. Med andra ord är poll () systemanropet analogt med att välja () systemanrop i arbete eftersom det håller sin eld för en av flera filbeskrivare genom att bli tillgänglig för I / O. Poll () undersöker den tilldelade dokumentbeskrivaren för att lista händelserna i incidenter till varje element i matrisen som pekar på den med filbeskrivare. Poll () -metoden kan avgöra vilken av filbeskrivarna ett program kommer att läsa eller skriva information till, vilka har sett dessa incidenter. I den här guiden använder vi Ubuntu 20.04 för att förstå begreppet poll () -system anropar Linux steg för steg.

Syntax:

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

Argumentet “fds” avgör vilka dokumentbeskrivare som ska kontrolleras, liksom de händelser som är viktiga för var och en. Det är en hänvisning till antingen en matris som har ett element för varje öppen dokumentbeskrivare. Arrayens element är pollfd-strukturer, där fd betecknar en öppen dokumentbeskrivare, och alla händelser och återhändelser, vanligtvis kallade bitmasker, genereras genom att skapa en sammanslagning av motsvarande händelseflaggor:

POLLIN:

Förutom högprioriterade data kan informationsdata läsas upp utan att till och med blockeras. Om svarsmeddelandet har nollstorlek genereras också denna flaggsignal för STREAMS in revents. Denna flagga har samma betydelse som POLLRDNORM | POLLRDBAND.

POLLRDNORM:

Utan avbrott kan ordinarie informationsdata avläsas. Information om primärt prioritetsband 0 kan läsas trots avbrott för STREAMS. Och om svarsmeddelandet har noll längd, genereras denna signal vid återhändelser.

POLLRDBAND:

Uppgifter om primära problem kommer att läsas ut trots att det orsakar förseningar. Information om prioritetsområden större än noll kan läsas trots störningar i STREAMS. Och om meddelandets svar har ingen varaktighet, förökas denna signal i nyckel.

POLLPRI:

Det kan finnas några undantag från dokumentbeskrivaren. Information med högsta prioritet kan läsas utan att blockeras. Dessutom, om svaret är noll varaktighet, förökas denna signal för STREAMS i förlopp.

FÖRSÄLJNING:

Användare kan skriva ut med POLLOUT-flaggan. Beroende på stopp kan typiska data spelas in. Information om preferensband 0 kan spelas in trots avbrottet i STREAMS.

POLLWRNORM:

Det fungerar på samma sätt som POLLOUT.

POLLWRBAND:

De mest prioriterade uppgifterna kommer att skrivas med den här flaggan. Information om preferensområden större än noll för STREAMS kan spelas in utan att blockeras. Denna aktivitet utvärderar bara band som redan har skrivits till minst en gång eftersom inget preferensband har skrivits på denna STREAM.

POLLERR:

Det är ett felvillkor och inträffar bara när systemet eller flödet har stött på ett problem. Denna symbol gäller endast för revents bitmask; under hela aktivitetsdeltagaren förbises det.

POLLHUP:

Den anger påhängningstillståndet och inträffar bara när anslutningen till systemet har inaktiverats. Denna händelse och POLLOUT är lika kompatibla; när ett problem har uppstått kommer en ström aldrig att skrivas.

POLLNVAL:

Detta anger den ogiltiga eller ovanliga begäran. Denna aktivitet utesluter ändå inte deltagande i POLLIN, POLLRDNORM, POLLRDBAND eller POLLPRI. Denna symbol gäller endast för revents bitmask; det förbises i deltagaren av evenemanget.

Exempel på omröstningssystemsamtal:

Den har samma roll som select (), men i större skala. Poll () är tillgänglig på alla Glibc-baserade Linux-maskiner. De äldre kärnorna imiterar poll () med select () i hela C-biblioteket. Men program bör inte behöva göra skillnad. Här är ett exempel på hur enkät () känns. Så öppna kommandoradsterminalen först med snabbtangenten “Ctrl + Alt + T.”Efter att ha öppnat den måste vi skapa en C-typfil för att skriva en C-typskod i den. För detta har vi använt nano-redigeraren. Så prova nedanstående nano-kommando i terminalen tillsammans med namnet på C-filen.

$ nano nytt.c

Nu har nano-redigeraren för C-filen ”ny” öppnats. Du måste först inkludera några bibliotek i den, särskilt ”omröstningen.h ”bibliotek. Huvudfunktionen har specificerats ha en heltalstyp med två argument i sin parameter, t.ex.g., argc och argv. Sedan har vi förklarat en filbeskrivare fd och en karaktärstyp med namnet “buf.”Därefter har en strukturvariabel definierats med namnet pollfd pfds av storlek 2. Därefter har ett öppet systemanrop förklarats för att få värdet från teckentypsarrayen och tilldela det till filbeskrivaren "fd" som visas i bilden. Medan filbeskrivaren är "1" kommer strukturen "pfds" att uppdateras med en del data i den med hjälp av POLLIN-flaggan i den. Nu har vi definierat en poll () systemanropsfunktion. Den första parametern för poll () systemanropet är ufds-strukturen som används i koden. Den andra parametern anger summan av pollfd-strukturer i fds-serien.

Och den sista parametern visar tidsgränsvärdet för heltalstyp för poll-systemanropet. Om pfds-nyheterna läggs till och läggs till med värdet 0, kommer det lästa systemanropet att läsa ut data från bufferten. Uttrycket "om" används för att kontrollera om det lästa uttalandet har returnerat sitt värde till ett heltal och skriva data. Om strukturen "pfds" är i position "1" medan du håller på och matar in data, kommer det lästa systemanropet att använda data från en buffert medan "fd" -beskrivaren används.

Spara det nya.c-fil och stäng den. Kompilera det nu med hjälp av gcc-kompilatorn.

$ gcc nytt.c

Under körningen av den här koden lade vi till data i en omröstning som ska läsas ut, och den skriver data igen som i nedanstående utdata.

$ ./ a.ut

Slutsats:

I den ovan beskrivna artikeln har vi diskuterat poll () systemanrop på C-språk. Jag hoppas att du tycker att den här handledningen är till hjälp och effektiv när du arbetar med Linux-operativsystemet.

Hur man använder GameConqueror Cheat Engine i Linux
Artikeln täcker en guide om hur du använder GameConqueror-fuskmotorn i Linux. Många användare som spelar spel på Windows använder ofta applikationen "...
Bästa spelkonsolemulatorer för Linux
Den här artikeln listar populära spelkonsolemuleringsprogram som finns tillgängliga för Linux. Emulation är ett mjukvarukompatibilitetsskikt som emule...
Bästa Linux Distros för spel 2021
Linux-operativsystemet har kommit långt från sitt ursprungliga, enkla, serverbaserade utseende. Detta operativsystem har förbättrats enormt de senaste...