C Programmering

Sådan bruges afstemningssystemopkald i C

Sådan bruges afstemningssystemopkald i C
Afstemning () -funktionen tillader programmer at multiplexere input og output gennem en række filbeskrivere. Med andre ord er systemopkaldet til afstemning () analogt med at vælge () systemopkald, da det holder ild for en af ​​flere filbeskrivere ved at blive tilgængelig for I / O. Afstemning () undersøger den tildelte dokumentbeskrivelse til notering af begivenhederne i hændelser til hvert element i arrayet, der peger på det ved hjælp af filbeskrivere. Poll () -metoden kan bestemme, hvilken af ​​filbeskrivere et program vil læse eller skrive detaljer til, som har set disse hændelser. I denne vejledning bruger vi Ubuntu 20.04 for at forstå begrebet meningsmåling () systemkald på Linux trin for trin.

Syntaks:

int afstemning (struct pollfd * ufds, usigneret int nfds, int timeout);

Argumentet “fds” bestemmer de dokumentbeskrivere, der skal kontrolleres, samt de hændelser, der har betydning for hver enkelt. Det er en henvisning til enten en matrix, der har et element til hver åben dokumentbeskrivelse. Arrayets elementer er pollfd-strukturer, hvor fd betegner en åben dokumentbeskrivelse, og alle hændelser og re-events, normalt kaldet bitmasker, genereres ved at skabe en sammenlægning af de tilsvarende hændelsesflag:

POLLIN:

Bortset fra data med høj prioritet kan informationsdata læses ud, frataget endda blokering. Også, hvis svarmeddelelsen er af nul størrelser, genereres dette flagssignal for STREAMS in revents. Dette flag har samme betydning som POLLRDNORM | POLLRDBAND.

POLLRDNORM:

Uden afbrydelse kan almindelige informationsdata aflæses. Oplysninger om primært prioritetsbånd 0 kan læses på trods af afbrydelse for STREAMS. Og hvis svarmeddelelsen er af nul længde, genereres dette signal i gentagelser.

POLLRDBAND:

Data om primære bekymringer vil blive aflæst på trods af at det medfører forsinkelser. Oplysninger om prioritetsområder større end nul kan læses på trods af forstyrrelser i STREAMS. Og hvis meddelelsens svar har nul varighed, forplantes dette signal i omvendelser.

POLLPRI:

Der kan være nogle undtagelser fra dokumentbeskriveren. Information med en topprioritet kan læses uden at være blokeret. Også, hvis svaret er nul varighed, forplantes dette signal til STREAMS i events.

POLOUT:

Brugere kan skrive ud ved hjælp af POLLOUT-flag. Frataget standsning kan typiske data registreres. Oplysninger om præferencebånd 0 kan optages på trods af afbrydelsen i STREAMS.

POLLWRNORM:

Det fungerer det samme som POLLOUT.

POLLWRBAND:

De mest prioriterede data skrives ved hjælp af dette flag. Oplysninger om præferenceområder større end nul for STREAMS kan registreres uden at blive blokeret. Denne aktivitet evaluerer kun bånd, der allerede er skrevet til mindst én gang, da der ikke er skrevet noget præferensbånd på denne STREAM.

POLLERR:

Det er en fejltilstand og opstår kun, når systemet eller flowet har stødt på et problem. Dette symbol gælder kun for revents bitmask; igennem hele aktivitetsdeltageren overses det.

POLLHUP:

Den specificerer tilslutningstilstand og forekommer kun, når forbindelsen til systemet er deaktiveret. Denne forekomst og POLLOUT er lige kompatible; når et problem først er opstået, vil der aldrig blive skrevet en strøm.

POLLNVAL:

Dette specificerer den ugyldige eller usædvanlige anmodning. Denne aktivitet udelukker ikke desto mindre deltagelse i POLLIN, POLLRDNORM, POLLRDBAND eller POLLPRI. Dette symbol gælder kun for revents bitmask; det overses i deltageren af ​​begivenheden.

Eksempel på afstemningssystemopkald:

Det udfører den samme rolle som select (), selv om det er i større skala. Afstemning () er tilgængelig på enhver Glibc-baseret Linux-maskine. De ældre kerner efterligner afstemning () med select () i hele C-biblioteket. Dog skal programmer ikke behøve at skelne. Her er et eksempel på, hvordan afstemning () føles. Så åbn kommandolinjeterminalen først ved hjælp af genvejstasten “Ctrl + Alt + T.”Når vi har åbnet den, skal vi oprette en C-type fil for at skrive en C-type kode i den. Til dette har vi brugt nano-editoren. Så prøv nedenstående nano-kommando i terminalen sammen med navnet på C-filen.

$ nano nyt.c

Nu er nano-editoren for C-filen "ny" blevet åbnet. Du skal først medtage nogle biblioteker i det, især “afstemningen.h ”bibliotek. Hovedfunktionen er angivet som en returtype med et heltal med to argumenter i dens parameter, f.eks.g., argc og argv. Derefter har vi erklæret en filbeskrivelse fd og et tegntypearray med navnet “buf.”Derefter er der defineret en strukturtypevariabel med navnet pollfd pfds af størrelse 2. Dernæst er et åbent systemopkald erklæret for at hente værdien fra tegnetypen og tildele den til filbeskrivelsen "fd" som vist på billedet. Mens filbeskrivelsen er "1", vil strukturen "pfds" blive opdateret med nogle data i den ved hjælp af POLLIN-flag i den. Nu har vi defineret en poll () systemopkaldsfunktion. Den første parameter i poll () -systemopkaldet er ufds-strukturen, der bruges i koden. Den anden parameter specificerer det samlede antal pollfd-strukturer i fds-serien.

Og den sidste parameter viser heltalstids-timeoutværdien for afstemningssystemopkaldet. Hvis pfds opdateres og tilføjes med en værdi på 0, så læser systemopkaldet dataene ud af bufferen. “If” -sætningen vil blive brugt til at kontrollere, om den læste sætning har returneret sin værdi til et heltal og skrive data. Hvis strukturen "pfds" er i position "1" under genoplivning og indtastning af data, vil det læste systemopkald bruge dataene fra en buffer, mens der bruges "fd" -beskrivelsen.

Gem det nye.c-fil og luk den. Kompilér det nu ved hjælp af gcc-kompilatoren.

$ gcc nyt.c

Mens vi udførte denne kode, tilføjede vi data i en afstemning, der skulle læses op, og den skriver data igen som i nedenstående output.

$ ./en.ud

Konklusion:

I denne ovenfor beskrevne artikel har vi diskuteret afstemning () systemopkald på C-sprog. Jeg håber, du finder denne tutorial nyttig og effektiv, mens du arbejder på Linux-operativsystemet.

Sådan installeres League Of Legends på Ubuntu 14.04
Hvis du er fan af League of Legends, er dette en mulighed for dig at prøvekøre League of Legends. Bemærk, at LOL understøttes på PlayOnLinux, hvis du ...
Installer det nyeste OpenRA-strategispil på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spilmotor, der genskaber de tidlige Westwood-spil som det klassiske Command & Conquer: Red Alert. Distrib...
Installer nyeste Dolphin Emulator til Gamecube & Wii på Linux
Dolphin Emulator giver dig mulighed for at spille dine valgte Gamecube & Wii-spil på Linux Personal Computers (PC). Som en frit tilgængelig og open s...