Primer za izbrani sistemski klic:
Imejmo preprost primer, da preverimo delovanje izbranega sistemskega klica. Odprite lupino ukazne vrstice z uporabo »Ctrl + Alt + T«.”Po odprtju terminala preverite, ali je v vašem sistemu nameščen prevajalnik za jezik C, ker koda brez njega ne bo delovala. Če ga nimate, poskusite spodnji ukaz, da to storite.
$ sudo apt namestite gcc
Če želite, da sistemski klic Linux select deluje, morate v sistemu namestiti paket manpages-dev v skladu s spodnjim ukazom. Za nadaljevanje napišite svoje uporabniško geslo.
$ sudo apt install manpages-dev
Sintakso in delovanje izbranega sistemskega klica si lahko ogledate s spodnjim ukazom »man«.
$ man 2 izberite
Izhodna man stran za izbrani sistemski klic je prikazana spodaj. Zaprite ga s pritiskom na tipko “q”.
Standardni imeniki, terminali ukazne lupine in psevdo-terminalne aplikacije, dokumenti, osredotočeni na STREAMS, FIFO, vključno s cevmi, podpira modul select (). Dejavnost select () na deskriptorjih dokumentov, ki se sklicuje na te druge oblike datotek, ni znana. Spodaj je torej razlaga sistemskega klica Select.
Opis sintakse, prikazan na zgornji sliki, je opisan spodaj.
Zgoraj je knjižnica, ki jo je treba vključiti v kodo C med uporabo izbranega sistemskega klica. Če ni vključena, koda ne deluje.
The nfds stavek definira niz opisnih datotek, ki bo ocenjen. Metoda select () preverja deskriptorje datotek med 0 in nfds-1.
Medtem readfds ni null, se nanaša na niz obrazca fd_set, ki določa, katere deskriptorje dokumentov je treba preizkusiti glede pripravljenosti za branje na vhodu in katere deskriptorje dokumentov je treba nastaviti na branje.
Ko writefds parameter ni prazen, nanaša se na entiteto oblike fd_set, ki določa, katere deskriptorje dokumentov je treba preizkusiti, ali je pripravljen za vpis na vhod. Deskriptorje dokumentov je treba pripraviti za sestavljanje ob izhodu.
Medtem ko errorfds parameter ni prazen, nanaša se na objekt vrste fd_set, ki določa, kateri deskriptorji dokumentov naj se preizkusijo, da pričakujejo stanje napak pri vnosu; prav tako je treba deskriptorje dokumentov preveriti ob izhodu.
Parametri readfds, writefds in errorfds se po dokončanju posodobijo, kar pomeni, da so deskriptorji dokumentov pripravljeni na branje, v celoti pripravljeni na pisanje ali celo čakajo na stanje izjem. Če je nadaljnji bit pritrjen na vhodu in je ustrezna situacija veljavna za vsak deskriptor datoteke malo pod nfds, bi bil naslednji bit postavljen na učinkovito izvedbo.
Čeprav parameter timeout v resnici ni prazen, vodi do entitete strukture timeval, ki določi največji čas, da zadržite ogenj, da se odločitev konča. Select () ne ovira povsem, če tak parameter časovne omejitve vodi do objekta timeval strukture z 0 elementi. Select () se ustavi, razen če pojav omogoča, da je eden od filtrov pridobljen z resničnim (ne nič) rezultatom, ne glede na to, ali je stavek časovne omejitve prazen sklic. Select () uspe učinkovito in ustvari 0, ko se čakalna doba konča, še preden se zgodi, kar lahko zahteva, da se ena od več mask prilagodi vrednosti, ki ni nič.
Ta makro odstrani zbirko (izbriše vse deskriptorje dokumentov). Uporablja se lahko kot prvi korak pri inicializaciji zbirke deskriptorjev dokumentov.
Ta makro v zbirko doda deskriptor dokumenta fd. Uporaba deskriptorja dokumenta za zbirko, ki je že obstajala, ne bi delovala in zato ne povzroči napake v izjemi.
Ta makro iz zbirke odstrani deskriptor dokumenta fd. Deskriptor datoteke, izločen iz zbirke, ki ne obstaja, ne deluje in zato ne povzroči izjeme.
Sistemski klic select () spremeni informacije ali podatke zbirk v skladu z zgoraj omenjenimi pravili. Makro FD ISSET () se lahko odvrne s klicem select (), da preverite, ali je opisnik dokumenta na voljo v zbirki.
Ustvarimo novo datoteko tipa C z imenom »novo.c "kot spodaj.
$ nano novo.c
Odprl se je urejevalnik GNU. Vanjo zapišite spodnjo kodo. Koda vsebuje glave, glavno funkcijo z nekaterimi deskriptorji datotek, kot je opisano zgoraj. Vsebuje tudi strukturo vrednosti časovnega intervala. Nato smo z izbranim sistemskim klicem preverili napako v stavku »if«. Pritisnite "Ctrl + S", da shranite to kodo, in "Ctrl + X", da ne zapustite urejevalnika.
Zdaj prevedite kodo z navodili »gcc«.
$ gcc novo.c
Zaženite kodo in ne dodajajte nobenega vnosa. Na izhodu bo pisalo »izberite časovno omejitev."
$ ./ a.ven
Spet zaženite kodo in vnesite nekaj vnosa v terminal, npr.g., »Aqsa."Izšlo bo, da so" podatki na voljo."
Zaključek:
Izvedli smo sistemski klic select na Ubuntu 20.04 Linux sistem. Koda mora delovati na vseh distribucijah Linuxa enako in pravilno. Upam, da vam je ta članek enostaven za uporabo in razumevanje.