Kaj je sistemski klic v Linuxu in kako deluje s primeri

What Is System Call Linux



Sistemski klic je funkcija, ki procesu omogoča komunikacijo z jedrom Linuxa. To je samo programski način, da računalniški program naroči objekt iz jedra operacijskega sistema. Sistemski klici izpostavljajo vire operacijskega sistema uporabniškim programom prek API -ja (Application Programming Interface). Sistemski klici lahko dostopajo samo do ogrodja jedra. Sistemski klici so potrebni za vse storitve, ki potrebujejo vire.

Jedro Linuxa je lastniška programska oprema, ki se naloži in deluje na napravi v najmanj možni fazi. Njegova naloga je organizirati vse, kar se dogaja na stroju, od tipkovnice, diskovnega pogona in omrežnih dogodkov do zagotavljanja časovnih rezin za sočasno izvajanje različnih programov. Ločitev programske in strojne opreme ustvari varen mehurček, ki izboljša zaščito in zanesljivost. Neprivilegirane aplikacije ne morejo doseči prostora za shranjevanje drugih programov, in če eden ne uspe, jedro prekine postopek, da ne poškoduje celotnega sistema.







Tanki ovoj za rezine:

Sistemski klici Linuxa se v nekaterih programih ne posredujejo izrecno jedru. Skoraj vsi programi uporabljajo osnovno knjižnico C in ponujajo lahek, a bistven ovoj nad sistemskimi klici Linuxa. Repozitorij nato zagotovi spremljajoči klic stroja Linux, potem ko zagotovi, da so parametri lastnosti prevedeni v desne registre procesorja. Kadar koli ovoj prejme podatke iz sistemskega klica, jih analizira in jasno prispeva k programu. Vsaka strojno interaktivna operacija v programu se na koncu pretvori v sistemski klic. Torej, poglejmo nekatere od njih. Obstaja dolg seznam sistemskih klicev Linuxa, ki jih lahko uporabimo v sistemu Linux. Tu je seznam nekaterih pogostih in večinoma uporabljenih sistemskih klicev v sistemu Linux.



  • Odprto
  • Zapri
  • Izv
  • Pišite
  • Preberite
  • Lseek
  • Izberite

Pogovorimo se o nekaterih sistemskih klicih Linuxa z uporabo jezika C v našem članku, da se z njimi seznanimo.



Odpri sistemski klic:

Sistemski klic Open v naši distribuciji Linuxa lahko uporabimo za hitro odpiranje dokumenta, ki ga bomo določili v kodi jezika C. Najprej zaženite ukazni terminal. Uporabite lahko bližnjico Ctrl+Alt+T. Recimo, da imate v domačem imeniku besedilno datoteko test.txt in vsebuje nekaj vsebine. Torej, na začetku morate ustvariti novo ime datoteke C tipa new.c v terminalu prek nano urejevalnika. Zato preizkusite preprosto spodnje nano navodilo.





$nanonovo.c

Zdaj je bil predstavljen urejevalnik Nano. Vanj vnesite spodaj prikazano kodo. V kodi imamo dva deskriptorja datotek. Obe datoteki lahko odprete z odprtim sistemskim klicem. Prvi deskriptor vsebuje klic branja, drugi pa funkcijo pisanja. Prvi odprti klic je odpiranje besedilne datoteke test.txt in shranjevanje njene vsebine v deskriptor datoteke fd. Drugi odprti sistemski klic je ustvarjanje datoteke z imenom target. Cilj dokumenta je bil povrnjen v opisnik datoteke fd1. Navodilo za pisanje se uporablja za prepis bajtov podatkov v medpomnilniku. Dotaknite se Ctrl+S, da shranite kodo, in pritisnite bližnjico Ctrl+X, da zaprete datoteko.



Zaženite gcc compile navodila za sestavljanje te kode C.

$gccnovo.c

Izvedimo kodo s preprosto poizvedbo a.out v lupini na naslednji način:

$./a.out

Izhodni podatki so bili poslani v cilj datoteke. Preverimo ciljno datoteko s poizvedbo cat. Na izhodnem zaslonu so prikazani podatki 20 znakov v ciljni datoteki.

$mačkatarča

Sistemski klic Exec:

Sistemski klic exec se zavrže za zagon datoteke, ki je trenutno v obdelavi. Prejšnja izvršljiva datoteka se nadomesti, trenutna pa se upravlja, kadar koli pokličete exec. Z uporabo sistemskega klica exec lahko domnevamo, da bo s tem stari dokument ali aplikacija v zanki prepisana s svežim. Nova programska oprema se uporablja za preglasitev celotnega materiala procesa. Dokument, katerega naslov je naveden v stavku, kadar koli prikličete exec (), se nadomesti z razdelkom z informacijami o uporabniku, ki izvaja sistemski klic exec () (). Odprite ukazni terminal in z urejevalnikom nano ustvarite novo datoteko tipa C na naslednji način:

$nanoexp.c

Urejevalnik je zdaj odprt. Vanj zapišite celotno kodo jezika C. Vanj so vključene tri glavne knjižnice. Po tem je bila nameščena glavna funkcija. Izjava o tiskanju prikazuje podatke o nizu in ID procesa datoteke exp.c. V ta namen je bila uporabljena funkcija getpid (). Nato imamo matriko tipa znakov z nekaj vrednostmi. Sistemski klic exec je bil uporabljen za ime datoteke in eno vrstico nad matriko kot argument. Zdaj bo datoteka hello.c obdelana. Po tem pride še ena izjava o tiskanju, vendar nikoli ne bo izvedena. Pritisnite Ctrl+S, da shranite to datoteko. Za izhod pritisnite Ctrl+X.

Zdaj je čas, da z nano urejevalnikom ustvarite še eno datoteko c, hello.c. Za to uporabite spodnjo poizvedbo v lupini.

$nanozdravo.c

Vanj vnesite spodnjo kodo. Ta koda vsebuje dve izjavi za tiskanje v glavni funkciji. Prvi je samo tiskanje niza, podanega v njem, drugi pa tiskanje niza med pridobivanjem ID -ja procesa trenutno uporabljene datoteke, ki je hello.c.

Sestavimo obe datoteki eno za drugo z uporabo gcc.

$gcc–O exp exp.c

$gcc–O zdravo zdravo.c

Ko izvedemo datoteko exp.c, bo izpisala prvo izjavo o tiskanju iz datoteke exp.c in obe vrstici za tiskanje iz datoteke hello.c.

$./eksp

Zaključek:

Obdelali smo celoten koncept sistemskih klicev Linux in kako jih je mogoče uporabiti v sistemu Linux. Pri izvajanju tega koncepta smo uporabili Ubuntu 20.04.