Syntax:
int poll (struct pollfd * ufds, unsigned int nfds, int timeout);Argument „fds“ určuje deskriptory dokumentů, které mají být zkontrolovány, a také významné události pro každý z nich. Je to odkaz na pole, které má jeden prvek pro každý otevřený deskriptor dokumentu. Prvky pole jsou struktury pollfd, kde fd označuje otevřený deskriptor dokumentu a všechny události a opakované události, obvykle nazývané bitové masky, jsou generovány vytvořením sloučení příslušných příznaků událostí:
POLLIN:
Kromě dat s vysokou prioritou lze číst informační data, která nemusí být vůbec blokována. Také pokud má zpráva odpovědi nulovou velikost, je tento příznakový signál generován pro STREAMS v příjmech. Tento příznak má stejný význam jako POLLRDNORM | POLLRDBAND.
POLLRDNORM:
Bez přerušení lze odečíst běžné informační údaje. Informace o pásmu 0 týkající se primární priority lze číst i přes přerušení pro STREAMS. A pokud má zpráva odpovědi nulovou délku, je tento signál generován v opakovaných událostech.
POLLRDBAND:
Data primárního zájmu budou načtena, přestože způsobí zpoždění. Informace o prioritních rozsazích větších než nula lze číst i přes zásah do STREAMS. A pokud je odezva zprávy nulová, tento signál se šíří v příjmech.
POLLPRI:
Z deskriptoru dokumentu mohou existovat určité výjimky. Informace s nejvyšší prioritou lze číst bez blokování. Také pokud je odezva nulová, tento signál se šíří pro STREAMS v reventech.
POLLOUT:
Uživatelé mohou odepisovat pomocí příznaku POLLOUT. Zbaveni zastavení, lze zaznamenat typická data. Informace o preferenčním pásmu 0 lze zaznamenat i přes přerušení ve STREAMS.
POLLWRNORM:
Funguje stejně jako POLLOUT.
POLLWRBAND:
Pomocí tohoto příznaku budou zapisována nejdůležitější data. Informace o rozsahu preferencí větších než nula pro STREAMS lze zaznamenávat bez blokování. Tato aktivita hodnotí pouze pásma, která již byla zapsána minimálně jednou, protože na tomto STREAMU nebylo napsáno žádné preferenční pásmo.
POLLERR:
Jedná se o chybový stav a vyskytuje se pouze v případě, že systém nebo tok narazil na problém. Tento symbol se vztahuje pouze na bitmasku revents; v průběhu účastníka aktivit je to přehlíženo.
POLLHUP:
Určuje podmínku zavěšení a nastane pouze v případě, že bylo zakázáno připojení k systému. Tento výskyt a POLLOUT jsou stejně kompatibilní; jakmile vznikne problém, stream nebude nikdy zapsán.
POLLNVAL:
Toto určuje neplatný nebo neobvyklý požadavek. Tato aktivita nicméně nevylučuje účast v POLLIN, POLLRDNORM, POLLRDBAND nebo POLLPRI. Tento symbol se vztahuje pouze na bitmasku revents; u účastníka akce je přehlédnut.
Příklad volání systému hlasování:
Provádí stejnou roli jako select (), i když ve větším měřítku. Poll () je k dispozici na libovolném stroji Linux založeném na Glibc. Starší jádra napodobují poll () s select () v celé knihovně C. Programy by však neměly vyžadovat rozlišení. Zde je příklad toho, jak se cítí poll (). Takže nejprve otevřete terminál příkazového řádku pomocí klávesové zkratky „Ctrl + Alt + T.„Po jeho otevření musíme vytvořit soubor typu C, abychom do něj mohli napsat kód typu C. K tomu používáme nano editor. Vyzkoušejte tedy níže uvedený příkaz nano v terminálu spolu s názvem souboru C.
$ nano nové.C
Nyní byl otevřen nano editor pro soubor C „nový“. Nejprve do něj musíte zahrnout některé knihovny, zejména „anketu“.h “knihovna. Hlavní funkce byla zadána jako mající celočíselný návratový typ se dvěma argumenty v parametru, např.G., argc a argv. Pak jsme deklarovali deskriptor souboru fd a pole typu znaků s názvem „buf.„Poté byla definována proměnná typu struktury s názvem pollfd pfds o velikosti 2. Dále bylo deklarováno otevřené systémové volání, které má získat hodnotu z pole typu znaků a přiřadit ji deskriptoru souboru „fd“, jak je vidět na obrázku. Zatímco deskriptor souboru je „1“, struktura „pfds“ bude aktualizována s některými daty v něm pomocí příznaku POLLIN v něm. Nyní jsme definovali funkci volání systému poll (). První parametr systémového volání poll () je struktura ufds použitá v kódu. Druhý parametr určuje celkový počet struktur pollfd v řadě fds.
A poslední parametr zobrazuje hodnotu časového limitu typu integer pro volání systému hlasování. Pokud jsou pfds reventy a přidány s hodnotou 0, pak načtené systémové volání načte data z vyrovnávací paměti. Příkaz „if“ bude použit ke kontrole, zda příkaz pro čtení vrátil svou hodnotu na celé číslo a zapíše data. Pokud je struktura „pfds“ v poloze „1“ při reventování a zadávání dat, přečtené systémové volání použije data z vyrovnávací paměti při použití deskriptoru „fd“.
Uložit nový.c soubor a zavřete jej. Nyní jej zkompilujte pomocí kompilátoru gcc.
$ gcc nové.C
Při provádění tohoto kódu jsme přidali data do průzkumu, který se má načíst, a zapisuje data znovu jako v níže uvedeném výstupu.
$ ./A.ven
Závěr:
V tomto výše popsaném článku jsme diskutovali o systémovém volání poll () v jazyce C. Doufám, že vám tento návod bude užitečný a efektivní při práci na operačním systému Linux.