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.cKeď 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í.