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.cAmikor 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.