Hogyan kell használni a rendszerírási hívást C -ben

How Use Write System Call C



A rendszerhívás elsődleges átjáróként szolgál a programok és a Linux operációs rendszer kernelje között. Bár szinte biztosan szükség van egy rendszerhívásra C programozói pályafutása során, akár kivételes termelékenységre, akár egy bizonyos stílusú funkcióra törekszik, a Glibc adattár vagy más, a népszerű Linux disztribúciókban megtalálható szabványos könyvtárak elegendőek lesznek a legtöbb felhasználó számára követelményeknek. Ebben az útmutatóban fogalmat fogunk kialakítani a Write System hívásról C nyelven.

Szintaxis:

#befoglalni

ssize_tír(int fd, const void*buf, size_t count);

Ebben a fenti szintaxisban az első sor a rendszerhívások könyvtárát mutatja. A második sorban az fd a fájlleírót jelenti, amely valóban egy szám, amely meghatározza a folyamat nyitott fájlját. A *buf kulcsszó a puffert jelenti. Ez minden adatot tartalmaz benne. A következő a számolás. Ez a pufferből egy fájlleíróba írandó bájtok száma.







Telepítés előfeltételei:

Bármely C nyelvű kód futtatásához először telepítenie kell néhány csomagot a Linux disztribúcióban. Ha további információkat szeretne látni az írási rendszerhívással kapcsolatban, telepítse a manpages-dev csomagot. A terminál megnyitásához használja a Ctrl+Alt+T gyorsbillentyűt. A megnyitása után írja be az alábbi apt install parancsot, majd a manpages-dev kulcsszót a manpages telepítéséhez.



$sudotalálótelepítésmanpages-dev



A manpages telepítése eltart egy ideig. Várja meg, amíg befejeződik.





A telepítés után az írási rendszerhívással kapcsolatos további információkat láthatja a shell alábbi man parancsán keresztül.



$Férfi 2 ír

Az írási parancs kimeneti kézi oldala az alábbiakban található. Elolvashatja az ezzel kapcsolatos információkat. A kézikönyvből való kilépéshez nyomja meg a q gombot.

Itt az ideje, hogy telepítse a Gcc csomagot a Linux rendszerébe, hogy a C nyelven működjön. Ehhez nyissa meg a parancsértelmezőt, és írja be az alábbi apt install parancsot, majd a gcc kulcsszót.

$sudotalálótelepítés gcc

Eközben a telepítés során kérheti, hogy erősítse meg ezt a telepítési műveletet, ha megnyomja az y gombot a folytatáshoz, és az n gombot a leállításához. Tehát érintse meg az y gombot, és nyomja meg az Enter billentyűt.

Néhány percen belül telepítve lesz a rendszerben, és a kimenet utolsó sorai az alábbi pillanatképben láthatók lesznek.

Példák:

Nézzünk néhány példát írási rendszerhívásra a Linux disztribúciónkban. Ezért nyissa meg a parancssori parancsértelmezőt, és hozzon létre egy új C fájlt a dot c kiterjesztéssel. Az alábbi nano paranccsal gyorsan létrehozhatja és megnyithatja azt. Új nevet adtunk neki.c.

$nanoúj.c

Megnyílik az alábbi ablak. Most be kell írnia a csatolt kódot ebbe a fájlba. Ebben a kódban először egy unistd.h könyvtárat vettünk fel. Ezután létrehoztuk a fő függvényt, és ezen belül egy írási rendszerhívást. Ebben a rendszerhívásban a legelső paraméter a fájlleíró. Ebben az esetben az 1 egész szám a kimeneti eszköz képernyőjét jelenti, és ez fix. Tehát a kimenetünk megjelenik a képernyőn. A második paraméter a puffer adatait mutatja. Bármit hozzáadhat hozzá. Az utolsó paraméter pedig a pufferparaméterben megadott adatok számát mutatja. Mint már említettük az 5 -öt a számlálási számként, csak a puffer adatok első 5 bájtját fogja megjeleníteni, és figyelmen kívül hagyja a bájtokat. Mentse el ezt a kódot a Ctrl+S gyorsbillentyűvel, és lépjen ki a fájlból a Ctrl+X paranccsal.

#befoglalni

Int fő()

{Ír(1Aqsa Yasin5);}

Most a terminálban próbálja meg az alábbi gcc parancsot, hogy lefordítsa ezt az újonnan létrehozott kódot fájlnévvel.

$gccúj.c

Nézzük meg ezt a kódot a futás közben létrehozott alapértelmezett a.out fájl használatával. Tehát próbálja ki az alábbi a.out parancsot az írási rendszerhívás kimenetének ellenőrzéséhez. A ./ használatával kell használni, hogy kiválasszuk a fájlt az aktuális könyvtárból.

$./a.ki

A látható kimenet csak az Aqsa szót jelenítette meg az 5 -ös szám miatt.

Változtassunk egy kicsit a kódunkon. Azért módosítottuk a számlálási számot 11 -re, mert összesen 11 bájt van az Aqsa Yasin puffer adataiban. Tehát ezúttal a kimenet az Aqsa Yasin karakterlánc -adatok teljes bájtját mutatja. Mentse ezt a fájlt a Ctrl+S billentyűkombinációval, és lépjen ki a Ctrl+X gyorsbillentyűvel.

Fordítsuk le a frissített kódot az újonnan telepített gcc fordító segítségével a Linux disztribúcióhoz. Próbálja ki ugyanazt a gcc parancsot a fájl nevével együtt, mint a new.c.

$gccúj.c

Most jelenítse meg ugyanazon kód kimenetét az előző a.out paranccsal az alábbiak szerint. A kimenet a puffer teljes Aqsa Yasin karakterláncát mutatja.

$./a.ki

Lássuk, hogyan működik a kód, ha nagyobb számot veszünk, mint a pufferadatok összes bájtja. Tehát a számlálót 30 -nak használjuk. Mentse el és zárja be a fájlt.

Fordítsa le ugyanazt a frissített fájlt a gcc paranccsal az alábbiak szerint.

$gccúj.c

Most hajtsa végre a fájlt az a.out paranccsal, és a kimenet megjeleníti a pufferadatokat, valamint néhány szemétértéket, amint az az alábbi pillanatkép kimenetben látható. $ ./A.out

A fájlba írt bájtok teljes számát az alábbi kód használatával is ellenőrizheti.

Fordítsa le a kódot gcc utasítással.

$gccúj.c

A kimenet az a.out paranccsal mutatja a bájtok teljes számát, beleértve a pufferadatokat és a sortörést.

$./a.ki

Következtetés:

Ebben az oktatóanyagban kidolgoztuk a C rendszer írási hívásának használatának koncepcióját. Próbálja ki az összes példát, hogy megértse az írási rendszerhívás gondolatát a cikk segítségével.