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.