Mikä on järjestelmäpuhelu Linuxissa ja miten se toimii esimerkkien kanssa

What Is System Call Linux



Järjestelmäpuhelu on toiminto, jonka avulla prosessi voi kommunikoida Linux -ytimen kanssa. Se on vain ohjelmallinen tapa tietokoneohjelmalle tilata toiminto käyttöjärjestelmän ytimestä. Järjestelmäkutsut paljastavat käyttöjärjestelmän resurssit käyttäjäohjelmille sovellusliittymän (Application Programming Interface) kautta. Järjestelmäpuhelut voivat käyttää vain ytimen kehystä. Järjestelmäkutsut ovat tarpeen kaikille resursseja tarvitseville palveluille.

Linux -ydin on oma ohjelmisto, joka lataa ja toimii laitteessa vähiten mahdollisessa vaiheessa. Sen tehtävänä on järjestää kaikki koneella tapahtuva, näppäimistöstä, levyasemasta ja verkkotapahtumista aina aikajaksojen tarjoamiseen eri ohjelmien samanaikaiselle suorittamiselle. Ohjelmiston ja laitteiston erottaminen luo turvallisen kuplan, joka parantaa suojausta ja luotettavuutta. Epäoikeudenmukaiset sovellukset eivät pääse muiden ohjelmien tallennustilaan, ja jos jokin epäonnistuu, ydin keskeyttää prosessin, jotta se ei vahingoita koko järjestelmää.







Kiekkojen ohut kääre:

Linux -järjestelmäkutsuja ei suoriteta nimenomaisesti ytimeen tietyissä ohjelmissa. Lähes kaikki ohjelmat käyttävät C -peruskirjastoa ja tarjoavat kevyen mutta välttämättömän paketin Linux -järjestelmäpuheluiden yli. Varasto antaa sitten mukana tulevan Linux -konekutsun sen jälkeen, kun on varmistettu, että ominaisuusparametrit on käännetty oikeisiin prosessorirekistereihin. Aina kun kääre vastaanottaa tietoja järjestelmäpuhelusta, se analysoi sen ja lisää sen ohjelmaan selkeästi. Kaikki koneen vuorovaikutteiset toiminnot ohjelmassa muutetaan lopulta järjestelmäkutsuksi. Katsotaanpa siis joitain niistä. On olemassa pitkä luettelo Linux -järjestelmäpuheluista, joita voimme käyttää Linux -järjestelmässämme. Tässä on luettelo joistakin yleisimmistä ja eniten käytetyistä Linux -järjestelmäpuheluista.



  • Avata
  • kiinni
  • Exec
  • Kirjoittaa
  • Lukea
  • Lseek
  • Valitse

Keskustelkaamme joistakin Linux-järjestelmäpuheluista, jotka käyttävät artikkelimme C-kieltä, jotta voimme käsitellä sitä.



Avaa järjestelmäpuhelu:

Voimme käyttää Open system -kutsua Linux -jakelussamme avataksesi nopeasti asiakirjan, jonka määritämme C -kielen koodissamme. Käynnistä komentoterminaali ensin. Voit käyttää pikanäppäintä Ctrl+Alt+T. Oletetaan, että kotihakemistossa on tekstitiedosto test.txt ja se sisältää jonkin verran sisältöä. Joten aluksi sinun on luotava uusi C -tyypin tiedostonimi new.c päätelaitteeseen nano -editorin kautta. Siksi kokeile alla olevaa yksinkertaista nano -ohjetta.





$nanouusi. c

Nyt Nano -editori on käynnistetty. Kirjoita siihen alla oleva koodi. Koodissa on kaksi tiedostojen kuvaajaa. Molemmat tiedostot voidaan avata käyttämällä avointa järjestelmäpuhelua. Ensimmäinen kuvaaja sisältää lukupyynnön ja toinen kirjoitustoiminnon. Ensimmäinen avoin puhelu on tekstitiedoston test.txt avaaminen ja sen sisällön tallentaminen tiedostonkuvaajaan fd. Toinen avoin järjestelmäpuhelu luo tiedoston nimeltä target. Asiakirjan kohde on korvattu fd1 -tiedoston kuvaajalle. Kirjoituskäskyä käytetään puskurin tietojen tavujen transkriptioon. Tallenna koodi napauttamalla Ctrl+S ja sulje tiedosto painamalla pikanäppäintä Ctrl+X.



Suorita gcc -kääntämisohje tämän C -koodin kääntämiseksi.

$gccuusi. c

Suoritamme koodi käyttämällä kuoren yksinkertaista a.out -kyselyä seuraavasti:

$./a. ulos

Lähtötiedot on lähetetty tiedostokohteelle. Tarkistetaan kohdetiedosto kissakyselyn avulla. Tulostusnäyttö näyttää kohdetiedoston 20 merkin tiedot.

$kissakohde

Suorita järjestelmän puhelu:

Suoritusjärjestelmän puhelu keskeytetään suorittamaan parhaillaan käsiteltävää tiedostoa. Entinen suoritettava tiedosto korvataan ja nykyistä tiedostoa käytetään aina, kun exec kutsutaan. Käyttämällä exec -järjestelmäkutsua voimme olettaa, että näin korvataan silmukan vanha asiakirja tai sovellus uudella. Uutta ohjelmistoa käytetään ohittamaan koko prosessin materiaali. Asiakirja, jonka otsikko annetaan lausekkeessa aina, kun kutsutaan exec (): ksi, korvataan käyttäjätiedot -osiolla, joka suorittaa exec () -järjestelmäkutsun (). Avaa siis komentopääte ja luo nanoeditorilla uusi C -tyypin tiedosto seuraavasti:

$nanoexp.c

Editori on nyt avattu. Kirjoita koko alla oleva C -kielikoodi. Siihen kuuluu kolme pääkirjastoa. Sen jälkeen päätoiminto on ilmennyt. Tulosteessa on näytetty merkkijonotiedot ja tiedoston prosessitunnus exp.c. Tätä varten on käytetty funktiota getpid (). Sitten meillä on merkkityyppinen taulukko, jossa on joitain arvoja. Suoritusjärjestelmän kutsua on käytetty ottamaan argumentiksi tiedostonimi ja yhden rivin yläpuolella oleva taulukko. Nyt tiedosto hello.c käsitellään. Sen jälkeen toinen painettu lausunto tulee toistaiseksi, mutta sitä ei koskaan suoriteta. Tallenna tämä tiedosto painamalla Ctrl+S. Poistu painamalla Ctrl+X.

Nyt on aika luoda toinen c -tiedosto, hello.c, käyttämällä nano -editoria. Käytä kuoren alla olevaa kyselyä tehdäksesi sen.

$nanohei C

Kirjoita siihen alla oleva koodi. Tämä koodi sisältää kaksi tulostuslauseketta päätoiminnossa. Ensimmäinen on vain siinä annetun merkkijonon tulostus ja toinen merkkijonon tulostus samalla kun haetaan parhaillaan käytetyn tiedoston prosessitunnusta, joka on hello.c.

Käännetään molemmat tiedostot peräkkäin gcc: n avulla.

$gcc- exp exp. C

$gcc- Hei hei. C

Kun suoritamme exp.c -tiedoston, se tulostaa ensimmäisen tulostuslausuman exp.c -tiedostosta ja molemmat tulostusrivit hello.c -tiedostosta.

$./exp

Johtopäätös:

Olemme kehittäneet koko Linux -järjestelmäkutsujen käsitteen ja kuinka niitä voidaan käyttää Linux -järjestelmässäsi. Olemme käyttäneet Ubuntu 20.04: tä tämän konseptin toteuttamisessa.