C programozás

Villával kódolás és exec a c példában

Villával kódolás és exec a c példában
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 közben jelentkeznek. Sajnos nincs lehetőség arra, hogy egyszerre több program is megjelenjen a C-ben. Csak egy feladat történhet egy adott időpontban, ami azt jelenti, hogy nem teszi lehetővé az egyidejű programok futtatását. Ez arra készteti Önt, hogy várjon az egyik folyamat befejezésére a másik végrehajtásához. Ennek a hibaelhárítási problémának az elkerülése érdekében előfordulhat, hogy jó fejlesztéssel kell fejlesztenie a programot, jó fejlesztőként. 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 egy új folyamat másolásában, és létrehoz egy újat azáltal, hogy felhívja a duplikált folyamatot. Az új folyamat a gyermekfolyamat, az előzőt szülőfolyamatnak hívják.

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

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

Telepítse a legújabb Dolphin Emulator for Gamecube & Wii szoftvert Linuxra
A Dolphin Emulator segítségével a kiválasztott Gamecube & Wii játékokat játszhatja Linux személyi számítógépeken (PC). Mivel a Dolphin Emulator szaba...
A GameConqueror Cheat Engine használata Linux alatt
A cikk tartalmaz egy útmutatót a GameConqueror csaló motor Linux alatt történő használatáról. Sok olyan felhasználó, aki Windows-on játszik játékot, g...
A legjobb játékkonzol emulátorok Linuxhoz
Ez a cikk felsorolja a Linux számára elérhető népszerű játékkonzol-emulációs szoftvereket. Az emuláció egy szoftver-kompatibilitási réteg, amely játék...