Míg az exec () függvény a jelenlegi meglévő program megváltoztatására szolgál. Ez a helyettesítés egy program vagy egy fájl tartalmának módosításával történik. Tehát a fork és az exec közötti különbség az, hogy a fork új folyamatot hoz létre a meglévő folyamatból, az exec pedig a meglévő program helyettesítésére szolgál egy új létrehozásával.
Előfeltételek
Bármely c program futtatásához Linux rendszerén telepítenünk kell néhány előfeltételt. Menjen a terminálhoz a Ctrl + Alt + T parancsikon segítségével. Most írja be a következő parancsokat a man oldalak telepítéséhez.
$ sudo apt install manpages-dev
Telepíti az összes megfelelő oldalt.
Haladva, egy program futtatásához Linuxon telepítenie kell egy kódfordítót. Ezt használják a kód fordításához és végrehajtásához. Erre a célra a GCC adattárakat telepítjük a rendszerünkbe.
$ sudo apt telepítse a GCC-t
Kódolás exec-kel c-ben
Amint telepítettük a man oldalakat a Linuxba, a következő paranccsal fogjuk megtekinteni az exec leírását. Az elsődleges minta szintaxisa a következő:
Szintaxis
Exec (elérési út / fájl, argv);Itt az „unistd.h ”fejléc, mivel az exec függvénycsaládok összes információját tartalmazza.
$ man exec
Most a fent idézett képen megfigyelheti az exec típusait. Ezek az exec funkciók családja. Mindegyik egy másik függvényhez tartozik, ugyanazon az alapon, az „exec.”
Példa: Most továbblépve egy példa segítségével leírjuk az exec funkcionalitását. Az exec egy funkcióját fogjuk bemutatni annak működésének bemutatására, amely az „execv.”Először két fájlt hozunk létre, kiterjesztéssel:.c.”Létrehozásuk után beírjuk a megfelelő kódokat, és végrehajtjuk őket, hogy lássuk az eredményt.
Tekintsünk egy fájlnevet „minta4.c ”. Kérjük, nyissa meg, és használja a következő kódot. Ebben a kódban az execv-t az alábbiakban meghatározott módon használtuk.
Execv (“./ sample4copy ”, érvel);Az első rész tartalmazza az új könyvtár elérési utat, a második rész pedig az argumentum tömböt jeleníti meg, mint átadott paramétert.
Minta4.c
Először kinyomtattuk az aktuális folyamat azonosítóját. Másodszor létrehoztunk egy karaktertömböt, amelynek NULL a vége a felmondáshoz. Harmadszor meghívtuk a sample4copy függvényt.
Minta4másolat.cAmikor meghívjuk az exec függvényt (), a folyamat képe megváltozik. Az alábbiakban idézett kép mutatja a sample4copy kódját.c.
Itt csak nyomtatott utasításokat használtunk az aktuális folyamat azonosítójának megszerzéséhez.
A megfelelő kódok kimenetét a következő parancsok használatával lehet megszerezni.
$ GCC-o minta4 minta4.c$ GCC -o sample4copy minta4copy.c
$ ./ minta4
Amint azt korábban leírtuk, a „GCC” szót használjuk a kód fordításához, és a fordítás után a kód sikeresen végrehajtásra kerül.
A kép szerint A minta 4 azonosítója.A c fájl akkor jelenik meg először, ahogyan 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 fájl mindkét nyomtatási utasítását.A c-t ott hajtják végre, ahol a getpid () segítségével megkapják a folyamat azonosítóját.
Villával kódolás c
A fork () függvény a szülői folyamatból hozza létre a gyermek folyamatát. Két fejlécet is tartalmaz, beleértve a villával kapcsolatos információkat is.
Szintaxis:
Pid_t villa (érvénytelen);Használhatjuk a man oldalt a használat során
$ ember villa
Példa: Most vegyen fontolóra egy példát egy „minta3” fájl létrehozásával.c ”. A kódot a fájl belsejébe írjuk be. A kód szerint a villa állapotát forkrankként állítottuk be.
Minta3.c
A feltétel alkalmazásához az „if-else” állítást használtuk. Az egyszerű nyomtatási parancsok itt vannak deklarálva, amelyek segítenek megérteni a fork () koncepciót. A Forkrankot először 0-nak, majd -1-nek deklaráljuk. A villa () segítségével most két folyamat működik, amelyek egyidejűleg működnek. A kimenet ugyanazt a kódot használva érhető el, mint amit fentebb az exec példában használtunk.
$ GCC -o minta3.c$./ minta3
A kimenet azt mutatja, hogy a gyermek folyamatot korábban hajtják végre, mint a szülőt, amikor a szülő folyamat várt. A várakozási függvény azt jelenti, hogy a szülő függvényt várakozásra készteti, hacsak az összes gyermekfolyamat egyikét nem fejezik be.
A Fork and Exec rendszer hívja kollektíven
Itt két fájlt veszünk, amelyek neve „minta1.c ”és„ minta2.c ”. Először nyissa meg a sampl1 fájlt.c, és írja be a kódot, amely a kép alatt található. Itt használtuk a fork () system-call-ot; a gyermekfolyamat létrehozásakor p-t 0-val rendeljük hozzá. Az exec system-call használata közben a minta1.c helyébe a 2. minta lép.c.
Minta1.c
2. minta.c
A fent bemutatott példákhoz hasonlóan a sample2 fájl tartalmazza a printf utasításokat is. A mintában1.c, először az első nyomtatási parancsot hajtják végre, majd meghívják a villa funkciót, amikor p == 0, majd a gyermekrész végrehajtásra kerül, és a minta2.c fájl futtatásra kerül. A kimenet tartalmaz GCC-t mindkét fájl fordításához. Itt szülő minta1.c id és minta2.A c id más, mert ők szülő és gyermek.
Következtetés
Ebben a cikkben a forkot és az exec-et külön-külön és együttesen használtuk, hogy könnyen megértsük a felhasználást és a koncepciót. Remélem, hogy ez az oktatóanyag elegendő tartalmat tartalmaz, amely hozzáférést biztosít az ismeretek bővítéséhez.