Rendszerhívások

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

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

A rendszerhívás olyan funkció, amely lehetővé teszi a folyamat kommunikációját a Linux kernellel. Ez csak egy programozási mód arra, 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 teszik ki a felhasználói programok számára egy API-n keresztül (Application Programming Interface). A rendszerhívások csak a kernel keretrendszerhez férhetnek hozzá. Rendszerhívásokra van szükség minden erőforrást igénylő szolgáltatáshoz.

A Linux kernel egy saját szoftver, amely a lehető legkevésbé tölti be és működik az eszközön. Feladata minden, ami a gépen történik, a billentyűzet, a lemezmeghajtó és a hálózati események megszervezése, az időszeletek biztosítása a különböző programok egyidejű végrehajtásához. 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 a többi program tárhelyét, és ha az egyik nem sikerül, a kern felfüggeszti a folyamatot, hogy ne károsítsa az egész rendszert.

Ostya vékony burkoló:

A Linux rendszer hívásait egyes programok nem kifejezetten a rendszermag felé továbbítják. Szinte az összes program az alapvető C könyvtárat használja, és könnyű, de elengedhetetlen csomagolást kínál a Linux rendszer hívásaihoz. Ezután az adattár biztosítja a kísérő Linux gépi hívást, miután megbizonyosodott arról, hogy a jellemző paraméterei lefordításra kerülnek a megfelelő processzorregiszterekbe. Amikor a csomagoló adatot fogad a rendszerhívásból, elemzi és egyértelműen hozzájárul a programhoz. A program bármely gépi interaktív művelete végső soron rendszerhívássá alakul. Tehát nézzük meg néhányukat. Hosszú lista van a Linux rendszerhívásokról, amelyeket felhasználhatunk Linux rendszerünkben. Itt található néhány általános és legtöbbször használt Linux rendszerhívás listája.

Beszéljük meg cikkünkben a Linux rendszer néhány hívását a C nyelv használatával, hogy kézbe vegyük őket.

Nyitott rendszerhívás:

Használhatjuk az „Open” rendszerhívást Linux disztribúciónkban a dokumentum gyors megnyitásához, amelyet a C nyelvű kódunkban adunk meg. Először indítsa el a parancsterminált. Használhatja a „Ctrl + Alt + T” parancsikont. Tegyük fel, hogy van egy szövegfájlja „teszt.txt ”a saját könyvtárban, és tartalmaz némi tartalmat. Tehát az elején létre kell hoznia egy új C típusú fájlnevet „új.c ”a terminálban a nano szerkesztő 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. A kódban két fájlleíró van. Mindkét fájl megnyitható a nyílt rendszerhívással. Az első leíró tartalmaz olvasási hívást, a második pedig az írási függvényt. Az első nyitott felhívás megnyitja a szöveges fájlt.txt ”és tartalmát az„ fd ”fájlleíróba menti. A második nyitott rendszerhívás egy „target” nevű fájlt hoz létre. A „cél” dokumentumot visszatérítették egy „fd1” fájlleírónak. Az írási utasítás a pufferben lévő adatok bájtjainak átírására szolgál. Érintse meg a „Ctrl + S” gombot a kód mentéséhez, majd nyomja meg a „Ctrl + X” billentyűt a fájl bezárásához.

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

$ gcc new.c

Végezzük el a kódot az egyszerű „a.out ”lekérdezés a shellben az alábbiak szerint:

$ ./ a.ki

A kimeneti adatokat továbbítottuk a „target” fájlba. Ellenőrizzük a „target” fájlt a „cat” lekérdezéssel. A kimeneti képernyőn a 20 karakteres adatok láthatók a „cél” fájlban.

$ macska cél

Exec rendszerhívás:

Az exec rendszerhívás folyamatban van egy folyamatban lévő fájl futtatásához. A korábbi futtatható fájl kicserélődik, és a jelenlegi fájl az exec meghívásakor működik. Egy exec rendszerhívás használatával feltételezhetjük, hogy ezzel felülírja a ciklusban található régi dokumentumot vagy alkalmazást egy újonnan. Új szoftvert használnak az egész folyamat anyagának felülírására. Az a dokumentum, amelynek a címe az utasításban van megadva, amikor az exec () meghívását kezdeményezi, helyettesíti az exec () rendszerhívást () futtató felhasználói információkat. Nyissa meg a parancsterminált, és a nano szerkesztő segítségével hozzon létre egy új C típusú fájlt az alábbiak szerint:

$ nano exp.c

A szerkesztő most megnyílt. Írja ki bele a teljes C nyelvi kódot. Három fő könyvtár található benne. Ezt követően a fő funkció példányos lett. A nyomtatási utasítás a string karakterláncokat és a fájl azonosítóját mutatja.c ”. A getpid () függvényt használták erre a célra. Ezután van egy karakter típusú tömb, benne néhány értékkel. Az exec rendszerhívást használták a fájlnév és a fenti tömb tömb argumentumként való felvételére. Most a fájl „hello.c ”feldolgozásra kerül. Ezt követően egy újabb nyomtatott utasítás jön eddig, de soha nem fogják végrehajtani. A fájl mentéséhez nyomja meg a „Ctrl + S” billentyűt. A kilépéshez nyomja meg a „Ctrl + X” gombot.

Itt az ideje, hogy hozzon létre egy másik c fájlt, „hello.c ”a nano szerkesztő használatával. Ehhez használja az alábbi lekérdezést a shellben.

$ nano szia.c

Írja bele az alábbi kódot. Ez a kód két nyomtatási utasítást tartalmaz a fő funkcióban. Az első csak egy benne megadott karakterláncot nyomtat, a második pedig a karakterláncot, miközben az éppen használt fájl folyamatazonosítóját tölti le, ami „hello.c ”.

Fordítsuk egymás után mindkét fájlt a gcc segítségével.

$ gcc -o exp exp.c

$ gcc -o hello hello.c

Amikor végrehajtjuk az exp.c fájlt, akkor az első nyomtatott utasítást adja ki az exp-ból.c fájlt és a hello mindkét nyomtatási sorát.c fájl.

$ ./ exp

Következtetés:

Kidolgoztuk a Linux rendszerhívások teljes koncepcióját és azt, hogy miként használhatók a Linux rendszerben. Az Ubuntu 20-at használtuk.04 e koncepció megvalósítása közben.

OpenTTD bemutató
Az OpenTTD az egyik legnépszerűbb üzleti szimulációs játék. Ebben a játékban létre kell hoznia egy csodálatos szállítási vállalkozást. Azonban kezdete...
SuperTuxKart Linuxhoz
A SuperTuxKart egy nagyszerű cím, amelynek célja, hogy ingyenesen hozza el a Mario Kart élményét Linux rendszerén. Elég kihívást jelentő és szórakozta...
Csata a Wesnoth bemutatóért
A Battle for Wesnoth az egyik legnépszerűbb nyílt forráskódú stratégiai játék, amelyet jelenleg játszhatsz. Ez a játék nem csak nagyon hosszú ideje fe...