Sistemski poziv funkcija je koja omogućuje procesu komuniciranje s Linux jezgrom. To je samo programski način na koji računalni program može naručiti objekt iz jezgre operacijskog sustava. Sistemski pozivi izlažu resurse operativnog sustava korisničkim programima putem API-ja (sučelje za programiranje aplikacija). Sistemski pozivi mogu pristupiti samo okviru jezgre. Pozivi sustava potrebni su za sve usluge koje trebaju resurse.
Linux jezgra vlasnički je softver koji se učitava i radi na uređaju u najmanje potencijalnoj fazi. Njegov je posao organizirati sve što se događa na stroju, od tipkovnice, diskovnog pogona i mrežnih događaja do pružanja vremenskih odsječaka za istovremeno izvršavanje različitih programa. Odvajanje softvera i hardvera stvara siguran mjehurić koji poboljšava zaštitu i pouzdanost. Neprivilegirane aplikacije ne mogu doći do pohrane drugog programa, a ako jedan ne uspije, kernel obustavlja postupak tako da ne ošteti cijeli sustav.
Tanki omot za oblatne:
Pozivi sustava Linux ne izriču se eksplicitno kernelu u određenim programima. Gotovo svi programi koriste osnovnu C biblioteku i nude lagan, ali bitan omot preko Linux sistemskih poziva. Repozitorij zatim pruža prateći Linux strojni poziv nakon što osigura da su parametri značajke prevedeni u prave registre procesora. Kad god omotač primi podatke iz sistemskog poziva, analizira ih i jasno doprinosi programu. Bilo koja interakcija stroja u programu na kraju se pretvara u sistemski poziv. Pa, pogledajmo neke od njih. Dug je popis Linux sistemskih poziva koje možemo koristiti u našem Linux sustavu. Ovdje je popis nekih uobičajenih i najčešće korištenih Linux sistemskih poziva.
- Otvorena
- Zatvoriti
- Izv
- Pisati
- Čitati
- Lseek
- Odaberi
Razgovarajmo o nekim Linuxovim sistemskim pozivima koji koriste jezik C u našem članku kako bismo ga upoznali.
Otvoreni sistemski poziv:
Možemo koristiti sistemski poziv „Otvori“ u našoj distribuciji Linuxa za brzo otvaranje dokumenta, što ćemo odrediti u našem kodu jezika C. Prvo pokrenite naredbeni terminal. Možete koristiti prečac "Ctrl + Alt + T". Pretpostavimo da imate "test" tekstualne datoteke.txt ”u početnom direktoriju i u njemu se nalazi određeni sadržaj. Dakle, na početku morate stvoriti novi naziv datoteke tipa C „novo.c ”u terminalu putem nano uređivača. Stoga isprobajte jednostavnu donju nano upute.
$ nano novo.c
Sada je pokrenut Nano editor. U njega upišite dolje prikazani kôd. U kodu imamo dva deskriptora datoteka. Obje se datoteke mogu otvoriti pomoću otvorenog sistemskog poziva. Prvi deskriptor sadrži poziv za čitanje, a drugi sadrži funkciju pisanja. Prvi otvoreni poziv je otvaranje tekstualne datoteke „test.txt "i spremanje njegovog sadržaja u deskriptor datoteke" fd ". Drugi otvoreni sistemski poziv stvara datoteku pod nazivom „target“. "Cilj" dokumenta nadoknađen je opisu datoteke "fd1". Uputa za pisanje koristi se za prepisivanje bajtova podataka u međuspremnik. Dodirnite “Ctrl + S” da biste spremili kôd i pritisnite tipku prečaca “Ctrl + X” da biste zatvorili datoteku.
Pokrenite naredbu za sastavljanje gcc za sastavljanje ovog C koda.
$ gcc novo.c
Izvršimo kôd pomoću jednostavnog „a.upit “u ljusci na sljedeći način:
$ ./ a.van
Izlazni podaci preneseni su u datoteku “target”. Provjerimo "ciljnu" datoteku pomoću upita "mačka". Izlazni zaslon prikazuje podatke od 20 znakova u "ciljnoj" datoteci.
$ mačka meta
Exec sistemski poziv:
Sistemski poziv exec odbacuje se radi pokretanja datoteke koja se trenutno obrađuje. Zamjenjuje se bivša izvršna datoteka, a trenutnom se upravlja kad god se pozove exec. Korištenjem exec sistemskog poziva možemo pretpostaviti da ćemo time prebrisati stari dokument ili aplikaciju u petlji, svježim. Novi softver koristi se za nadjačavanje cjelokupnog materijala procesa. Dokument čiji je naslov naveden u izjavi svaki put kad se poziva exec () zamijeni odjeljak s korisničkim informacijama koji pokreće sistemski poziv exec () (). Dakle, otvorite naredbeni terminal i pomoću nano uređivača stvorite novu datoteku tipa C na sljedeći način:
$ nano exp.c
Urednik je sada otvoren. U njega zapišite cijeli jezični kod ispod. U nju su uključene tri glavne knjižnice. Nakon toga je pokrenuta glavna funkcija. Izjava za ispis prikazuje niz podataka i ID procesa datoteke „exp.c ". U tu svrhu korištena je funkcija getpid (). Tada imamo niz znakova s nekim vrijednostima. Sistemski poziv exec korišten je za uzimanje imena datoteke i gornjeg niza u jednom retku kao argumenta. Sada je datoteka “zdravo.c ”će se obraditi. Nakon toga zasad dolazi još jedna izjava za ispis, ali ona se nikada neće izvršiti. Pritisnite “Ctrl + S” da biste spremili ovu datoteku. Pritisnite "Ctrl + X" za izlaz.
Sada je vrijeme za stvaranje još jedne c datoteke, „zdravo.c ”pomoću nano uređivača. Upotrijebite donji upit u ljusci da biste to učinili.
$ nano zdravo.c
U njega napišite donji kod. Ovaj kôd sadrži dvije ispisne izjave u glavnoj funkciji. Prvi ispisuje samo niz koji je u njemu naveden, a drugi ispis niza dok se preuzima ID procesa trenutno korištene datoteke, a to je „zdravo.c ".
Sastavimo obje datoteke jednu za drugom koristeći gcc.
$ gcc -o exp exp.c$ gcc -o zdravo zdravo.c
Kada izvršimo exp.c datoteku, ispisat će prvi ispis iz naredbe exp.c datoteku i obje linije za ispis iz hello.c datoteka.
$ ./ exp
Zaključak:
Razradili smo čitav koncept Linux sistemskih poziva i kako se oni mogu koristiti u vašem Linux sustavu. Koristili smo Ubuntu 20.04 tijekom provedbe ovog koncepta.