Mi a rendszerhívás Linuxon, és hogyan működik példákkal

What Is System Call Linux



A rendszerhívás olyan funkció, amely lehetővé teszi, hogy egy folyamat kommunikáljon a Linux kernellel. Ez csak egy programozott módja annak, hogy egy számítógépes program megrendeljen egy létesítményt az operációs rendszer kerneljéből. A rendszerhívások az operációs rendszer erőforrásait a felhasználói programok elé teszik egy API -n (Application Programming Interface) keresztül. A rendszerhívások csak a kernel keretrendszeréhez férhetnek hozzá. Rendszerhívásokra van szükség minden olyan szolgáltatáshoz, amely erőforrásokat igényel.

A Linux kernel szabadalmaztatott szoftver, amely a lehető legkevesebb szakaszban tölti be és működteti az eszközt. Feladata, hogy megszervezze mindazt, ami a gépen történik, a billentyűzettől, a lemezmeghajtótól és a hálózati eseményektől kezdve a különböző programok párhuzamos végrehajtásának időszeleteinek biztosításáig. A szoftver és a hardver szétválasztása biztonságos buborékot hoz létre, amely javítja a védelmet és a megbízhatóságot. A jogosulatlan alkalmazások nem tudják elérni más programok tárhelyét, és ha az egyik meghibásodik, a rendszermag felfüggeszti a folyamatot, hogy ne károsítsa az egész rendszert.







Ostya vékony csomagoló:

A Linux rendszerhívásai bizonyos programokban nem jelennek meg kifejezetten a rendszermaghoz. Szinte minden program az alapvető C könyvtárat használja, és könnyű, de elengedhetetlen csomagolást kínál a Linux rendszerhívásokhoz. A lerakat ezután biztosítja a kísérő Linux géphívást, miután meggyőződött arról, hogy a szolgáltatás paraméterei a megfelelő processzorregiszterekbe kerülnek. Amikor a csomagoló adatokat kap a rendszerhívásból, elemzi azokat, és egyértelműen hozzájárul a programhoz. A program bármely gépi interaktív művelete végül rendszerhívássá alakul. Lássunk tehát néhányat közülük. Hosszú a Linux rendszerhívások listája, amelyeket Linux rendszerünkben használhatunk. Íme néhány gyakori és leggyakrabban használt Linux rendszerhívás listája.



  • Nyisd ki
  • Bezárás
  • Végrehajt
  • Ír
  • Olvas
  • Lseek
  • Válassza a lehetőséget

Beszéljünk meg néhány Linux-rendszerhívást a C nyelvet használva cikkünkben, hogy kézbe vehessük.



Nyissa meg a rendszerhívást:

A Linux rendszerű disztribúciónk Open system hívásával gyorsan megnyithatjuk a dokumentumot, amelyet C nyelvű kódunkban adunk meg. Először indítsa el a parancssort. Használhatja a Ctrl+Alt+T billentyűparancsot. Tegyük fel, hogy a test.txt szövegfájl van a saját könyvtárban, és tartalmaz benne bizonyos tartalmat. Tehát az elején létre kell hoznia egy új C típusú fájlnevet new.c a terminálban a nano editor segítségével. Ezért próbálja ki az alábbi egyszerű nano utasítást.





$nanoúj.c

Most elindult a Nano szerkesztő. Írja be az alább látható kódot. Két fájlleíró van a kódban. Mindkét fájl megnyitható a nyílt rendszerhívással. Az első leíró olvasási hívást tartalmaz, a második pedig az írási függvényt. Az első nyitott hívás a test.txt szövegfájl megnyitása és tartalmának mentése a fd fájlleíróba. A második nyílt rendszerhívás egy cél nevű fájl létrehozása. A dokumentumcél visszatérítésre került egy fd1 fájlleíróhoz. Az írási utasítás a pufferben lévő adatok bájtjának átírására szolgál. Érintse meg a Ctrl+S gombot a kód mentéséhez, majd nyomja meg a Ctrl+X gyorsbillentyűt a fájlból való kilépéshez.



Futtassa a gcc fordítási utasítást a C kód fordításához.

$gccúj.c

Futtassuk le a kódot a héjban található egyszerű a.out lekérdezés használatával az alábbiak szerint:

$./a.ki

A kimeneti adatokat továbbította a fájlcélnak. Ellenőrizzük a célfájlt a macska lekérdezés használatával. A kimeneti képernyő a célfájl 20 karakteres adatait mutatja.

$macskacél

Rendszerhívás végrehajtása:

A végrehajtó rendszerhívás le van tiltva egy éppen feldolgozás alatt álló fájl futtatásához. A korábbi végrehajtható fájlt kicserélik, és az aktuális fájlt a végrehajtás meghívásakor működtetik. Az exec rendszerhívás használatával feltételezhetjük, hogy ezzel felülírja a régi dokumentumot vagy alkalmazást a ciklusban egy újonnan. Új szoftvert használnak a folyamat teljes anyagának felülbírálására. A dokumentum, amelynek a címe a utasításban szerepel, amikor az exec () meghívásakor az exec () rendszerhívást () futtató felhasználói információs részt helyettesíti. Tehát nyissa meg a parancsterminált, és a nano -szerkesztővel hozzon létre egy új C típusú fájlt az alábbiak szerint:

$nanoexp.c

A szerkesztő most megnyílt. Írja le a teljes C nyelv alatti kódot. Három fő könyvtár szerepel benne. Ezt követően a fő funkció példányossá vált. A nyomtatási utasítás megmutatja a karakterlánc adatait és az exp.c fájl folyamat azonosítóját. Erre a célra a getpid () függvényt használtuk. Ekkor van egy karakter típusú tömbünk, amelyben vannak értékek. A végrehajtó rendszerhívást arra használták, hogy a fájl nevét és az egysoros tömböt argumentumként vegye fel. Most a hello.c fájl kerül feldolgozásra. Ezt követően újabb nyomtatott nyilatkozat érkezik, de azt soha nem hajtják végre. A fájl mentéséhez nyomja le a Ctrl+S billentyűkombinációt. A kilépéshez nyomja meg a Ctrl+X billentyűkombinációt.

Itt az ideje, hogy a nano -szerkesztő segítségével hozzon létre egy másik c fájlt, a hello.c -t. Ehhez használja a shell alábbi lekérdezését.

$nanoszia.c

Írja be az alábbi kódot. Ez a kód két nyomtatási utasítást tartalmaz a fő funkcióban. Az első csak a benne megadott karakterlánc nyomtatása, a második pedig a karakterlánc kinyomtatása, miközben lekéri a jelenleg használt fájl folyamatazonosítóját, amely hello.c.

Fordítsuk le mindkét fájlt egymás után a gcc használatával.

$gcc–O exp exp.c

$gcc–o hello hello.c

Amikor végrehajtjuk az exp.c fájlt, az az első nyomtatási utasítást adja ki az exp.c fájlból, és mindkét nyomtatási sort a hello.c fájlból.

$./exp

Következtetés:

Kidolgoztuk a Linux rendszerhívások teljes koncepcióját, és azt, hogy hogyan használhatók ezek a Linux rendszerben. A koncepció megvalósítása során az Ubuntu 20.04 -et használtuk.