C Programovanie

Ako sa používa Select System Call In C

Ako sa používa Select System Call In C
Systémové volanie select () umožňuje systému sledovať niekoľko deskriptorov súborov. Takže vybrané systémové volanie čaká, kým sa niektorý z deskriptorov alebo celok ukáže byť „pripravený“ na konkrétny typ I / O aktivity (napr.g., vstup možný). Ak následný I / O proces (napr.g., čítanie (2)) je možné vykonať aj napriek blokovaniu, deskriptor súboru sa považuje za schopný. Metóda select () popisuje, či je deskriptor dokumentu k dispozícii na čítanie, pripravený na zápis alebo v stave výnimky. Predpokladajme, že uvedená situácia je nepravdivá pre úplne uvedené deskriptory súborov. V takom prípade sú bloky systémového volania select () pred uvedenými okolnosťami platné minimálne pre jeden z uvedených deskriptorov dokumentu, ktorý sa rovná uvedenému intervalu časového limitu.

Príklad pre výber systémového volania:

Poďme si dať jednoduchý príklad na vyskúšanie fungovania vybraného systémového volania. Otvorte shell príkazového riadku pomocou „Ctrl + Alt + T.„Po otvorení terminálu sa uistite, že máte vo svojom systéme nainštalovaný kompilátor v jazyku C. Pretože bez neho nebude kód fungovať. Ak ho nemáte, vyskúšajte nasledujúci príkaz.

$ sudo apt nainštalovať gcc

Ak chcete, aby fungovalo systémové volanie systému Linux select, musíte mať vo svojom systéme nainštalovaný balík manpages-dev podľa nižšie uvedeného príkazu. Pokračujte napísaním hesla používateľa.

$ sudo apt install manpages-dev

Syntax a fungovanie vybraného systémového volania môžete vidieť pomocou nižšie uvedeného príkazu „man“.

$ man 2 vyber

Nasleduje výstupná manuálna stránka pre vybrané systémové volanie. Ukončite ho stlačením klávesu „q“.

Modul select () podporuje štandardné adresáre, príkazové prostredie terminálových a pseudoterminálových aplikácií, dokumenty centrované na STREAMS, FIFO, vrátane rúrok. Aktivita select () na deskriptoroch dokumentov odkazujúcich na tieto ďalšie formáty súborov nie je známa. Takže nižšie je vysvetlenie systémového volania Select.

Opis syntaxe zobrazenej na obrázku vyššie je popísaný nižšie.

Hore je knižnica, ktorá má byť zahrnutá do kódu C pri použití vybraného systémového volania. Ak nie je zahrnutý, kód nefunguje.

The nfds vyhlásenie definuje množinu deskriptorov súborov, ktorá bude vyhodnotená. Metóda select () kontroluje deskriptory súborov medzi 0 a nfds-1.

Zatiaľ čo readfds nie je null, odkazuje sa na pole formulára fd_set, ktoré definuje, ktoré deskriptory dokumentov by sa mali testovať na pripravenosť čítať na vstupe a ktoré deskriptory dokumentov by sa mali nastaviť na čítanie na výstupe.

Keď writefds parameter nie je prázdny, odkazuje na entitu formulára fd_set, ktorá definuje, ktoré deskriptory dokumentov by sa mali testovať na pripravenosť na vpísanie na vstupe. Deskriptory dokumentov by mali byť pripravené na zostavenie na výstupe.

Kým errorfds parameter nie je prázdny, odkazuje na objekt druhu fd_set, ktorý určuje, ktoré deskriptory dokumentov by sa mali testovať na očakávanie chybového stavu vecí na vstupe; deskriptory dokumentov by sa tiež mali na výstupe overiť.

Parametre readfds, writefds a errorfds sa po dokončení aktualizujú, aby znamenali, že deskriptory dokumentov sú pripravené na čítanie, plne pripravené na zápis alebo dokonca čaká na ne stav výnimky. Ak je nasledujúci bit fixovaný na vstupe a príslušná situácia je platná pre každý deskriptor súborov o niečo menej ako nfds, nasledujúci bit by sa umiestnil na efektívne splnenie.

Aj keď parameter časového limitu nie je skutočne prázdny, vedie to k entite časovej štruktúry, ktorá určuje najvyšší čas na udržanie streľby, aby mohla byť dokončená. Select () celkom neprekáža, ak takýto parameter časového limitu vedie k objektu časovej štruktúry s 0 prvkami. Select () zastaví, pokiaľ výskyt neumožňuje načítanie jedného z filtrov so skutočným (nenulovým) výsledkom, bez ohľadu na to, či je príkaz časového limitu prázdnym odkazom. Funkcia Select () účinne uspeje a po ukončení čakacej doby ešte predtým, ako dôjde k výskytu, vytvorí 0, čo si môže vyžadovať úpravu jednej z niekoľkých masiek na nenulovú hodnotu.

Toto makro vylučuje zhromažďovanie (vymaže všetky deskriptory dokumentov). Môže sa použiť ako prvý krok v inicializácii kolekcie deskriptorov dokumentov.

Deskriptor dokumentu fd je do makra pridaný týmto makrom. Použitie deskriptora dokumentu do kolekcie, ktorá už existuje, by bolo nefunkčné, a preto by nemalo za následok chybu výnimky.

Deskriptor dokumentu fd je týmto makrom odstránený zo zbierky. Deskriptor súboru vyradený z kolekcie, ktorý neexistuje, je nefunkčný, a preto nevedie k výnimke.

Systémové volanie select () mení informácie alebo údaje o zbierkach podľa vyššie uvedených pravidiel. Makro FD ISSET () je možné zrušiť vyvolaním funkcie select (), aby ste zistili, či je deskriptor dokumentu naďalej k dispozícii v kolekcii.

Vytvorme nový súbor typu C s názvom „nový.c “ako je uvedené nižšie.

$ nano nové.c

Bol otvorený editor GNU. Vyplňte doň pod kód. Tento kód obsahuje hlavičky, hlavnú funkciu s niektorými deskriptormi súborov, ako je uvedené vyššie. Obsahuje tiež štruktúru hodnoty časového intervalu. Potom sme pomocou príkazu select system skontrolovali chybu vo výroku „if“. Stlačením klávesov „Ctrl + S“ uložte tento kód a klávesom „Ctrl + X“ ukončite editor.

Teraz kompilujte kód pomocou inštrukcie „gcc“.

$ gcc nové.c

Spustite kód a nepridávajte žiadny vstup. Na výstupe bude uvedené „select timeout.“

$ ./ a.von

Opäť spustite kód a zadajte nejaký vstup do terminálu, napr.g., "Aksá.".„Výsledkom bude, že„ údaje sú k dispozícii.“

Záver:

Implementovali sme vybrané systémové volanie na Ubuntu 20.04 Systém Linux. Tento kód by mal fungovať na všetkých distribúciách Linuxu rovnako a správne. Dúfam, že sa vám tento článok bude ľahko implementovať a porozumieť mu.

Hry Top 10 hier, ktoré sa dajú hrať na Ubuntu
Top 10 hier, ktoré sa dajú hrať na Ubuntu
Platforma Windows je jednou z dominujúcich platforiem pre hry kvôli obrovskému percentu hier, ktoré sa dnes vyvíjajú na natívnu podporu systému Window...
Hry 5 najlepších arkádových hier pre Linux
5 najlepších arkádových hier pre Linux
V dnešnej dobe sú počítače vážne stroje používané na hranie hier. Ak nemôžete dosiahnuť nové najvyššie skóre, budete vedieť, čo tým myslím. V tomto pr...
Hry Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 Vývoj uvoľnený
Battle For Wesnoth 1.13.6 vydané minulý mesiac, je šiestym vývojovým vydaním v 1.13.séria x a prináša množstvo vylepšení, najmä používateľského rozhra...