Kódovanie vidličkou a spustenie príkladom v c

Coding With Fork Exec Example C



Názov nášho článku obsahuje dve rôzne funkcie jazyka C, ktoré sa vyskytujú pri spustení akéhokoľvek programu v našom systéme. V C. je bohužiaľ nulová možnosť výskytu viac ako jedného programu súčasne. V konkrétnom čase sa môže stať iba jedna úloha, čo znamená, že neumožňuje spustenie súbežných programov. Spôsobí to, že budete čakať na dokončenie jedného procesu, aby ste vykonali ten druhý. Aby ste sa tomuto problému pri riešení problémov vyhli, možno budete musieť svoj program dobre rozvinúť a byť dobrým vývojárom. Linux fork () sa používa na prekonanie čakania a na umožnenie súbežnosti vo vašom systéme. Pomáha pri duplikácii nového procesu a vytvára nový volaním duplicitného procesu. Nový proces je detský proces a predchádzajúci sa nazýva rodičovský proces.

Zatiaľ čo funkcia exec () sa používa na zmenu súčasného existujúceho programu za nový. Táto náhrada sa vykoná vykonaním zmien v obsahu programu alebo súboru. Odlišnosť medzi fork a exec je teda v tom, že fork vytvára nový proces z existujúceho procesu a exec sa používa na nahradenie existujúceho programu vytvorením nového.







Predpoklady

Na spustenie akéhokoľvek programu c vo vašom systéme Linux musíme doň nainštalovať niekoľko predpokladov. Prejdite na terminál pomocou skratky Ctrl+Alt+T. Teraz napíšte nasledujúce príkazy na inštaláciu manuálových stránok.



$sudovýstižnýInštaláciamanpages-dev



Nainštaluje všetky zodpovedajúce stránky.





Ak chcete spustiť program v systéme Linux, musíte si nainštalovať kompilátor kódu. To sa používa na kompiláciu kódu a jeho spustenie. Za týmto účelom nainštalujeme do nášho systému archívy GCC.

$sudovýstižnýInštaláciaGCC



Kódovanie s exec v c

Keď sme nainštalovali manuálové stránky v systéme Linux, použijeme nasledujúci príkaz na zobrazenie popisu týkajúceho sa spustenia. Primárna vzorová syntax je nasledovná:

Syntax

Exec(názov cesty/súbor, argv);

Tu sme použili hlavičku unistd.h, pretože obsahuje všetky informácie o rodinách funkcie exec.

$muž exekútor

Teraz na vyššie citovanom obrázku môžete pozorovať typy exec. Jedná sa o rodinu výkonných funkcií. Každý z nich je pre inú funkciu podľa rovnakého základu, exec.

Príklad: Teraz, ďalej, popíšeme funkčnosť exec pomocou príkladu. Na demonštráciu jeho fungovania vezmeme jednu funkciu exec, ktorou je execv. Najprv vytvoríme dva súbory s príponou .c. Po ich vytvorení do nich napíšeme príslušné kódy a spustíme ich, aby sme videli výsledok.

Zvážte názov súboru sample4.c. Otvorte ho a použite nasledujúci kód. V tomto kóde sme použili execv konkrétnym spôsobom uvedeným nižšie.

Execv(./sample4copy, arg);

Prvá časť obsahuje novú cestu k adresáru a druhá časť zobrazuje pole argumentov ako parameter, ktorý sme odovzdali.

Ukážka4.c

Najprv sme vytlačili ID aktuálneho procesu. Za druhé, vytvorili sme pole znakov s koncovkou NULL na konci. Po tretie, nazvali sme funkciu sample4copy.

Sample4copy.c

Keď zavoláme funkciu exec (), obraz procesu sa zmení. Nasledujúci obrázok ukazuje kód sample4copy.c.

Tu sme na získanie ID aktuálneho procesu použili iba tlačové príkazy.

Výstup príslušných kódov je možné získať pomocou nasledujúcich príkazov.

$ GCC – o vzorka4 ukážka4.c
$ GCC –o sample4copy sample4copy.c
$./ukážka4

Ako sme už opísali, na zostavenie kódu sa používa slovo GCC a po kompilácii sa kód úspešne vykoná.

Podľa obrázku je PID súboru sample4.c zobrazený najskôr, ako bol deklarovaný pred volaním exec. Potom, čo sa zavolá funkcia exec (), sa vykonajú tlačové príkazy súboru sample4copy.c, kde sa na získanie ID procesu použije getpid ().

Kódovanie vidličkou v c

Funkcia fork () vytvára podradený proces z nadradeného procesu. Obsahuje tiež dve hlavičky vrátane informácií o vidlici v ňom.

Syntax:

Vidlica Pid_t(prázdny);

Na pomoc s používaním môžeme použiť manuálovú stránku

$mužvidlička

Príklad: Teraz zvážte príklad vytvorením súboru sample3.c. Kód zadáme do súboru. Podľa kódu sme stav vidlice nastavili ako vidlička.

Ukážka3.c

Na uplatnenie podmienky sme použili príkaz if-else. Tu sú deklarované jednoduché tlačové príkazy, ktoré pomáhajú porozumieť konceptu fork (). Forkrank je najskôr deklarovaný ako 0 a potom -1. S fork () teraz existujú dva procesy, ktoré fungujú súbežne. Výstup je možné získať pomocou rovnakého kódu, ako bol použitý vyššie v príklade exec.

$ GCC –o ukážka3.c
$./ukážka3

Výstup ukazuje, že podradený proces sa vykoná skôr ako rodič, keď čakal nadradený proces. Funkcia čakania znamená, že spôsobí, že nadradená funkcia počká, pokiaľ sa neukončí jeden zo všetkých podradených procesov.

Systémové hovory Fork a Exec súhrnne

Tu vezmeme dva súbory s názvom sample1.c a sample2.c. Najprv otvorte súbor sampl1.c a napíšte kód, ktorý je priložený nižšie na obrázku. Tu sme použili systémové volanie fork (); keď je vytvorený podriadený proces, p bude priradené 0. Pri použití exec system-call bude sample1.c nahradený sample2.c.

Ukážka1.c

Ukážka2.c

Podobne ako v príkladoch uvedených vyššie, súbor sample2 bude obsahovať príkazy printf. V sample1.c sa vykoná prvý príkaz na tlač, potom sa zavolá funkcia fork, keď p == 0, potom sa spustí podradená časť a spustí sa súbor sample2.c. Výstup bude obsahovať GCC na kompiláciu oboch súborov. Tu je identifikátor rodiča sample1.c a ID vzorky2.c odlišný, pretože sú rodičom a dieťaťom.

Záver

V tomto článku sme použili fork aj exec oddelene a spoločne, aby sme ľahko porozumeli použitiu a konceptu. Dúfam, že tento návod obsahuje dostatočný obsah, ktorý povedie k prístupu k eskalácii vašich znalostí.