Kódolás villával és végrehajtással példában a c

Coding With Fork Exec Example C



Cikkünk címe a C nyelv két különböző funkcióját tartalmazza, amelyek a rendszerünk bármely programjának futtatása során jelentkeznek. Sajnos nulla esély van arra, hogy egyszerre több program is előforduljon C. Ez arra készteti, hogy várja meg, amíg az egyik folyamat befejeződik, hogy végrehajtsa a másikat. A hibaelhárítási probléma elkerülése érdekében előfordulhat, hogy a programot jó módon kell fejlesztenie, mivel jó fejlesztő. A Linux fork () a várakozás leküzdésére és az egyidejűség engedélyezésére szolgál a rendszerben. Segít az új folyamat sokszorosításában, és újat hoz létre a megismételt folyamat meghívásával. Az új folyamat a gyermekfolyamat, az előző pedig szülői folyamat.

Míg az exec () függvény a jelenlegi program megváltoztatására szolgál. Ez a csere a program vagy a fájl tartalmának módosításával történik. Tehát az eltérés a fork és az exec között az, hogy a fork új folyamatot hoz létre a meglévő folyamatból, és az exec -t használják a meglévő program cseréjére egy új létrehozásával.







Előfeltételek

Bármilyen c program futtatásához a Linux rendszeren telepítenünk kell néhány előfeltételt. Lépjen a terminálra a Ctrl+Alt+T gyorsbillentyű használatával. Most írja be a következő parancsokat a kézi oldalak telepítéséhez.



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



Telepíti az összes megfelelő oldalt.





Továbblépve, egy program Linuxon történő futtatásához telepítenie kell egy kódfordítót. Ezt a kód fordítására és végrehajtására használják. Ebből a célból GCC tárolókat telepítünk a rendszerünkbe.

$sudotalálótelepítésGCC



Kódolás végrehajtással c

Mivel telepítettük a man oldalakat Linuxra, a következő paranccsal fogjuk látni a végrehajtással kapcsolatos leírást. Az elsődleges minta szintaxisa a következő:

Szintaxis

Végrehajt(útvonal/fájlt, argv);

Itt az unistd.h fejlécet használtuk, mivel az tartalmazza az exec függvénycsaládok összes információját.

$Férfi végrehajt

Most a fent idézett képen megfigyelheti a végrehajtás típusait. Ezek a végrehajtási funkciók családja. Mindegyik ugyanazt a bázist követő különböző funkciókra szolgál, exec.

Példa: Most továbblépve egy példa segítségével ismertetjük az exec funkcionalitását. Az exec egyik funkcióját fogjuk bemutatni működésének bemutatására, ez az execv. Először két fájlt hozunk létre .c kiterjesztéssel. Létrehozásuk után beleírjuk a megfelelő kódokat, és végrehajtjuk őket, hogy lássuk az eredményt.

Tekintsünk egy fájlnevet sample4.c. Nyissa meg, és használja az alábbi kódot. Ebben a kódban az execv -t az alábbiakban meghatározott módon használtuk.

Végrehajt(./sample4copy, args);

Az első rész tartalmazza az új könyvtár elérési útját, a második rész pedig az argumentum tömböt mutatja, mint paramétert, amelyet átmentünk.

Minta4.c

Először is kinyomtattuk az aktuális folyamat azonosítóját. Másodszor, létrehoztunk egy karakter tömböt, amelynek végén NULL van a befejezéshez. Harmadszor, a sample4copy függvényt hívtuk meg.

Sample4copy.c

Amikor az exec függvényt () hívjuk, a folyamat képe megváltozik. Az alábbi idézett képen a sample4copy kódja látható. C.

Itt csak nyomtatott utasításokat használtunk az aktuális folyamat azonosítójának lekéréséhez.

A megfelelő kódok kimenete a következő parancsok használatával érhető el.

$ GCC – o minta4 minta4.c
$ GCC –o sample4copy sample4copy.c
$./minta4

Amint azt korábban leírtuk, a GCC szót használják a kód fordításához, és a fordítás után a kód végrehajtása sikeres.

A kép szerint a sample4.c fájl PID -je jelenik meg először, amint azt az exec hívás előtt deklarálták. Ezután az exec () függvény meghívása után a sample4copy.c fájl mindkét nyomtatási utasítása végrehajtásra kerül, ahol a getpid () függvényt használják a folyamat azonosítójának megszerzésére.

Kódolás villával c

A fork () függvény létrehozza a gyermekfolyamatot a szülői folyamatból. Két fejlécet is tartalmaz, beleértve a villával kapcsolatos információkat is.

Szintaxis:

Pid_t villa(üres);

Segítségül használhatjuk a man oldalt

$FérfiVilla

Példa: Most tekintsünk egy példát a sample3.c fájl létrehozásával. Beírjuk a kódot a fájlba. A kód szerint a villa állapotát forkrank -nek állítottuk be.

Minta3.c

A feltétel alkalmazására az if-else utasítást használtuk. Az egyszerű nyomtatási parancsok itt vannak megadva, hogy segítsenek a villa () fogalmának megértésében. A Forkrank először 0, majd -1. A villával () most két folyamat működik párhuzamosan. A kimenetet ugyanazzal a kóddal lehet elérni, mint a fenti példában.

$ GCC –o minta3.c
$./minta3

A kimenet azt mutatja, hogy a gyermekfolyamat korábban hajtódik végre, mint a szülő, amikor a szülői folyamat várakozott. A várakozási függvény azt jelenti, hogy a szülői függvény várakozását okozza, kivéve, ha az összes gyermekfolyamat közül egyet leállítanak.

A Fork and Exec rendszer együttesen hív

Itt két, sample1.c és sample2.c nevű fájlt veszünk. Először nyissa meg a sampl1.c fájlt, és írja be az alábbi képhez csatolt kódot. Itt használtuk a fork () rendszerhívást; a gyermekfolyamat létrehozásakor a p érték 0 lesz. Az exec rendszerhívás használata során a sample1.c helyébe a sample2.c lép.

Minta1.c

Minta2.c

A fent tárgyalt példákhoz hasonlóan a sample2 fájl tartalmazza a printf utasításokat. A sample1.c példában először az első nyomtatási parancsot hajtják végre, majd a villa függvényt hívják meg, amikor p == 0, majd a gyermekrész kerül végrehajtásra, és a sample2.c fájl fut. A kimenet GCC -t tartalmaz mindkét fájl fordításához. Itt a szülői minta1.c azonosító és a minta2.c azonosító különbözik, mert szülő és gyermek.

Következtetés

Ebben a cikkben mind a villát, mind a végrehajtást külön -külön és együttesen használtuk, hogy könnyen megértsük a használatot és a fogalmat. Remélem, hogy ez az oktatóanyag elegendő tartalmat tartalmaz, amely hozzáférést biztosít a tudás bővítéséhez.