Primjer za odabir sistemskog poziva:
Imajmo jednostavan primjer da provjerimo rad odabranog sistemskog poziva. Otvorite ljusku naredbenog retka pomoću "Ctrl + Alt + T.”Nakon otvaranja terminala, provjerite je li na vašem sustavu instaliran kompajler za jezik C jer kod bez njega neće raditi. Ako ga nemate, isprobajte donju naredbu da biste to učinili.
$ sudo apt instaliraj gcc
Ako želite vidjeti kako sistemski poziv Linux select funkcionira, na vašem sustavu morate instalirati paket manpages-dev prema naredbi u nastavku. Za nastavak napišite svoju korisničku lozinku.
$ sudo apt install manpages-dev
Sintaksu i rad odabranog sistemskog poziva možete vidjeti pomoću naredbe "man" u nastavku.
$ man 2 odaberi
Izlazna man stranica za odabrani sistemski poziv prikazana je u nastavku. Napustite ga pritiskom na tipku "q".
Standardni direktoriji, terminali naredbe ljuske i pseudo-terminalne aplikacije, dokumenti usmjereni na STREAMS, FIFO-i, uključujući cijevi, podržani su modulom select (). Aktivnost select () na deskriptorima dokumenata koji se odnose na ove druge formate datoteka je nepoznata. Dakle, ispod je objašnjenje sistemskog poziva Select.
Opis sintakse prikazan na gornjoj slici opisan je u nastavku.
Iznad je knjižnica koju treba uključiti u C kod tijekom korištenja odabranog sistemskog poziva. Ako nije uključen, kôd ne radi.
The nfds naredba definira skup deskriptora datoteke koji će se procijeniti. Metoda select () provjerava deskriptore datoteka između 0 i nfds-1.
Dok readfds nije null, odnosi se na niz oblika fd_set koji definira koji se opisi dokumenata trebaju testirati na spremnost za čitanje na ulazu i koji opisnici dokumenata trebaju biti postavljeni za čitanje na izlazu.
Kada writefds parametar nije prazan, odnosi se na entitet obrasca fd_set koji definira koji opisnici dokumenta trebaju biti testirani na spremnost za upis na ulaz. Opise dokumenata treba pripremiti za sastavljanje na izlazu.
Dok errorfds parametar nije prazan, odnosi se na objekt vrste fd_set, koji određuje koji bi se deskriptori dokumenta trebali testirati na čekanje stanja pogreške na ulazu; također, deskriptori dokumenata trebaju biti provjereni na izlazu.
Parametri readfds, writefds i errorfds ažuriraju se nakon završetka kako bi označili da su deskriptori dokumenata pripremljeni za čitanje, u potpunosti pripremljeni za pisanje ili čak imaju stanje izuzeća, u skladu s tim. Ako je sljedeći bit učvršćen na ulazu i relevantna situacija vrijedi za svaki opis datoteke malo ispod nfds, sljedeći bit bit će postavljen na učinkovito postignuće.
Iako parametar timeout zapravo nije prazan, dovodi do strukture timeval entiteta koji određuje vrhunsko vrijeme za zadržavanje vatre da bi izbor završio. Select () ne ometa ako takav parametar vremenskog ograničenja dovede do vremenskog objekta strukture s 0 elemenata. Select () se zaustavlja osim ako pojava dopušta dohvaćanje jednog od filtara s istinitim (ne-nultim) rezultatom, bez obzira je li iskaz vremenskog ograničenja prazna referenca. Select () uspješno postiže i proizvodi 0 kad se završi razdoblje čekanja i prije nego što se dogodi, što može zahtijevati da se jedna od nekoliko maski prilagodi na vrijednost koja nije nula.
Ova makronaredba uklanja zbirku (briše sve deskriptore dokumenata). Može se koristiti kao prvi potez u inicijalizaciji zbirke deskriptora dokumenta.
Deskriptor dokumenta fd dodaje se u zbirku ovom makronaredbom. Korištenje deskriptora dokumenta u zbirci koja je već postojala ne bi bilo operativno i stoga ne bi rezultiralo pogreškom izuzeća.
Ovaj makronaredba uklanja deskriptor dokumenta fd iz zbirke. Deskriptor datoteke uklonjen iz zbirke koja ne postoji ne radi i stoga ne rezultira iznimkom.
Sistemski poziv select () mijenja podatke ili podatke zbirki prema gore spomenutim pravilima. Makronaredba FD ISSET () može se odbaciti pozivanjem select () da biste vidjeli ostaje li opisnik dokumenta dostupan u zbirci.
Stvorimo novu datoteku tipa C pod nazivom „novo.c ”kao u nastavku.
$ nano novo.c
Otvoren je uređivač GNU. U njega zapišite donji kod. Kôd sadrži zaglavlja, glavnu funkciju s nekim deskriptorima datoteka kako je prethodno razrađeno. Sadrži i strukturu za vrijednost vremenskog intervala. Zatim smo upotrijebili odabrani sistemski poziv za provjeru pogreške u izjavi "ako". Pritisnite "Ctrl + S" da biste spremili ovaj kôd i "Ctrl + X" da biste napustili uređivač.
Sada kompajlirajte kod pomoću upute "gcc".
$ gcc novo.c
Pokrenite kôd i nemojte dodavati nikakve unose. Na izlazu će se reći „odaberite timeout."
$ ./ a.van
Ponovno pokrenite kôd i unesite neki ulaz u terminal, npr.g., “Aqsa."Izlazit će da su" podaci dostupni."
Zaključak:
Implementirali smo odabrani sistemski poziv na Ubuntu 20.04 Linux sustav. Kôd bi trebao raditi na svim distribucijama Linuxa jednako i pravilno. Nadam se da će vam ovaj članak biti lako implementirati i razumjeti.