A nyílt rendszerhívás használata C -ben

How Use Open System Call C



A rendszerhívásokat a Linux disztribúciók használják, hogy ajtót nyújtsanak a Linux operációs rendszerben és a programokban. A Linux operációs rendszer a Glibc könyvtárat használja a rendszerhívások támogatására a C nyelv használata közben. A rendszerhívások használatának sokkal több módja is van. Ebben a cikk útmutatóban a Linux rendszer nyílt rendszerhívásáról fogunk beszélni. A rendszer megnyitása hívást használta az elérési útban megadott fájl gyors megnyitásához. Tájékoztat minket a felhasználó által létrehozott fájl fájlleírójáról. Az Ubuntu 20.04-et használtuk, hogy néhány gyakorlati Open-hívást kapjunk.

Telepítse a Könyvtárakat

A C nyelv előfeltételeként néhány további könyvtári csomagot kell telepíteni. Először is telepítenie kell a manpages-dev csomagot, hogy ellenőrizze a rendszerhívásokkal kapcsolatos információkat. Nyissa meg a parancssori terminált a tevékenységterületről, és hajtsa végre az alábbi utasítást a manpages telepítéséhez.





$ sudo apt install manpages-dev



A telepítés befejezéséhez szükséges kimenetet az alábbiakban adjuk meg.







Most ellenőrizni fogjuk a nyílt rendszerhívást a man paranccsal az alábbiak szerint.

$ ember2nyisd ki



Az alábbiakban a Nyílt rendszer hívás kimeneti kézi oldala látható. Az ezzel kapcsolatos további információkat megtekintheti. A kilépéshez nyomja meg a q gombot.

A fenti szintaxis a rendszerhívásokhoz hozzáadandó szükséges könyvtárak első három sorát mutatja. A nyílt rendszerhíváshoz három szintaxis áll rendelkezésre. Az első szintaxis az útvonalat mutatja, amely a megnyitandó fájl neve. A második paraméter, a flags, egy fájl módját mutatja, például olvasás vagy írás. A második szintaxis akkor használható, ha a fájl nem létezik. A paraméter mód a jogosultságok megjelenítésére szolgál a fájlban.

Itt az ideje, hogy telepítse a GCC fordítót a C kód hibakereséséhez az Ubuntu 20.04 Linux disztribúcióban. Ehhez hajtsa végre az alábbi utasítást a shellben.

$ sudo apt install gcc

Meg kell érintenie az Y gombot a GCC fordító telepítésének folytatásához, ellenkező esetben nyomja meg az n gombot a telepítés bezárásához. Tehát nyomja meg az y gombot, és nyomja meg az Enter billentyűt a folytatáshoz.

A befejezés kimenete az alábbiakban látható.

Példa 01

Nézzük a nyílt rendszer hívásának nagyon egyszerű példáját. Először nyissa meg a parancshéjat, és hozzon létre egy új szövegfájlt test.txt az egyszerű érintőképernyős paranccsal az alábbiak szerint:

$érintéstest.txt

Adjon hozzá néhány adatot manuálisan. A fájl adatait az alábbi cat paranccsal láthatja.

$macskatest.txt

Most hozzunk létre egy új C fájlt a héj nano parancsa segítségével, amint az alább látható.

$nanoúj.c

Megnyílik az alábbi GNU nano fájl. Az alábbi C nyelvi kódot kell beírni. Láthatjuk, hogy hozzáadtuk a szükséges könyvtári csomagokat a C kód megfelelő végrehajtásához. Ezt követően meghatároztuk a fő funkciót az Open system híváson való munkavégzéshez. Két egész változót deklaráltunk. Az n változót a pufferértékek számlálására, az fd -t pedig a fájlleíróhoz használjuk. A karakter típusú puffertömböt 50 -es méretű buf -nak nyilvánítottuk. A nyílt rendszerhívást arra használtuk, hogy beolvassa a tartalmat a test.txt fájlból, és visszaadja a fájlleírónak. Az O_RDONLY -t olvasási célokra használták. A következő sor az olvasott rendszerhívást mutatja, hogy összegyűjtse a 10 bájtot a pufferből, és adja vissza az n egész számba. Ezenkívül a write parancsot használták a tartalom vagy a puffer adatok fájlleíróba történő írására, amely a kimeneti képernyő Esetünkben jelenleg. Mentse ezt a fájlt a Ctrl+S billentyűkombinációval, és zárja be a Ctrl+X paranccsal.

#befoglalni
#befoglalni
#befoglalni
#befoglalni

intfő-()
{
intn,fd;
charbuf[ötven];
fd=nyisd ki(teszt.txt,O_RDONLY);
n=olvas(fd,buf, 10);
ír(1 ,buf, 10);

Először fordítsuk le a C -kódot egy nyílt rendszerhíváshoz az alábbi gcc paranccsal.

$gccúj.c

Most itt az ideje, hogy ellenőrizze a nyílt rendszerhívás C -kódjának kimenetét. Használjuk az alábbi a.out parancsot a shellben. A kimenet a test.txt fájl tartalmából származó 10 bájtot jeleníti meg.

$./nak nek.ki

Vegyünk egy másik példát az egyik fájl tartalmának másik fájlba írására egy nyílt rendszerhívás segítségével. Új C fájl létrehozása a nano paranccsal az alábbiak szerint.

$ nano új.c

Tehát vegye be ugyanazt a kódot egy kisebb módosítással. Egy másik fájlleírót definiáltunk a kódban, mint fd1. Minden kód ugyanaz, kivéve egy további sort. A kód második utolsó sora a nyitott rendszerhívást használva új fájlt hozott létre célként, az O_CREAT és a mód használatával, csak írva, mint O_WRONLY. A 0642 a fájlhoz rendelt jogosultságokat mutatja. És a fájl visszatért egy új fájlleíróba. A következő sor egy parancsot mutatott, amellyel a tartalom bájtjait írhatja a pufferbe a fájlleíró szerint. Mentse el a fájlt, és zárja be.

Futtassa a gcc compile parancsot a C nyelvű fájl hibakereséséhez.

$ gcc új.c

A C kód kimenetének megjelenítéséhez próbálja meg az a.out utasítást a shellben az alábbiak szerint. Nincs kimenet, mert a kimenetet átirányították az újonnan létrehozott fájlcélra.

$./nak nek.ki

Ellenőrizzük a fájlcél adatait a cat paranccsal. A kimenet azt mutatja, hogy a fájlban 20 bájt van.

$ macska célpont

Következtetés

A fenti oktatóanyagban elmagyaráztuk Önnek, hogy használjon nyílt rendszerű hívást C nyelven a gcc fordító használatával. Az ebben az útmutatóban ismertetett különböző példák segítségével elvezeti Önt a kívánt program megvalósításához.