Zatímco funkce exec () se používá ke změně stávajícího programu za nový. Toto nahrazení se provádí provedením změn v obsahu programu nebo souboru. Rozdíl mezi vidlicí a execem je tedy v tom, že fork vytváří nový proces ze stávajícího procesu a exec se používá k nahrazení stávajícího programu vytvořením nového.
Předpoklady
Chcete-li ve svém systému Linux spustit libovolný program c, musíme do něj nainstalovat některé předpoklady. Přejít na terminál pomocí zkratkové metody Ctrl + Alt + T. Nyní zadejte následující příkazy pro instalaci manuálových stránek.
$ sudo apt install manpages-dev
Nainstaluje se všechny odpovídající stránky.
Chcete-li spustit program v systému Linux, musíte si nainstalovat kompilátor kódu. To se používá ke kompilaci kódu a jeho spuštění. Za tímto účelem do našeho systému nainstalujeme úložiště GCC.
$ sudo apt nainstalovat GCC
Kódování pomocí exec v c
Protože jsme nainstalovali manuálové stránky v Linuxu, použijeme následující příkaz k zobrazení popisu týkajícího se exec. Syntaxe primárního vzorku je následující:
Syntax
Exec (cesta / soubor, argv);Zde jsme použili „unistd.h ”záhlaví, protože obsahuje všechny informace o rodinách funkce exec.
$ man exec
Nyní na výše citovaném obrázku můžete pozorovat typy exec. Jedná se o rodinu funkcí exec. Každý z nich je pro jinou funkci sledující stejnou základnu, „exec.“
Příklad: Nyní, když se posuneme dále, popíšeme funkčnost exec pomocí příkladu. Vezmeme jednu funkci exec, abychom demonstrovali její fungování, což je „execv.„Nejprve vytvoříme dva soubory s příponou„.C.„Po jejich vytvoření do nich napíšeme příslušné kódy a provedeme je, abychom viděli výsledek.
Zvažte název souboru „sample4.C". Otevřete jej a použijte následující kód. V tomto kódu jsme použili execv konkrétním způsobem uvedeným níže.
Execv („./ sample4copy “, args);První část obsahuje novou cestu k adresáři a druhá část zobrazuje pole argumentů jako parametr, který jsme předali.
Ukázka4.C
Nejprve jsme vytiskli ID aktuálního procesu. Zadruhé jsme vytvořili pole znaků s NULL na konci pro ukončení. Zatřetí jsme nazvali funkci sample4copy.
Sample4copy.CKdyž zavoláme funkci exec (), změní se obraz procesu. Níže citovaný obrázek níže ukazuje kód sample4copy.C.
Zde jsme použili pouze tiskové příkazy k získání ID aktuálního procesu.
Výstup příslušných kódů lze získat pomocí následujících příkazů.
$ GCC-o sample4 sample4.C$ GCC -o sample4copy sample4copy.C
$ ./ sample4
Jak jsme popsali dříve, slovo „GCC“ se používá ke kompilaci kódu a po kompilaci je kód úspěšně proveden.
Podle obrázku je PID vzorku4.Soubor c se zobrazí jako první, protože byl deklarován před voláním exec. Poté, co je volána funkce exec (), obě tiskové příkazy souboru sample4copy.c se provádí tam, kde se getpid () používá k získání ID procesu.
Kódování vidličkou v c
Funkce fork () vytvoří podřízený proces z nadřazeného procesu. Obsahuje také dvě záhlaví, včetně informací o rozvětvení.
Syntax:
Pid_t vidlice (void);Pro pomoc s používáním můžeme použít manuálovou stránku
$ vidlice pro muže
Příklad: Nyní zvažte příklad vytvořením souboru „sample3.C". Zadáme kód do souboru. Podle kódu jsme nastavili stav vidlice jako forkrank.
Ukázka3.C
K uplatnění podmínky jsme použili příkaz „if-else“. Zde jsou deklarovány jednoduché tiskové příkazy, které pomáhají porozumět konceptu fork (). Forkrank je nejprve deklarován jako 0 a poté -1. S fork () nyní existují dva procesy, které fungují souběžně. Výstup lze získat pomocí stejného kódu, jaký se používá výše v příkladu exec.
$ GCC -o vzorek3.C$./ sample3
Výstup ukazuje, že podřízený proces je spuštěn dříve než nadřazený, když čekal nadřazený proces. Funkce čekání znamená, že způsobí, že nadřazená funkce bude čekat, dokud nebude ukončen jeden ze všech podřízených procesů.
Systém Fork and Exec volá kolektivně
Zde vezmeme dva soubory s názvem „sample1.c “a„ sample2.C". Nejprve otevřete soubor sampl1.c a napište kód, který je připojen níže na obrázku. Zde jsme použili systémové volání fork (); při vytvoření podřízeného procesu bude p přiřazeno 0. Při použití systémového volání exec je sample1.c bude nahrazeno sample2.C.
Ukázka 1.C
Ukázka 2.C
Podobně jako v příkladech popsaných výše bude soubor sample2 obsahovat příkazy printf. V sample1.c, nejprve se provede první tiskový příkaz, potom se vyvolá funkce vidlice, když p == 0, potom se provede dětská část a sample2.Soubor c bude spuštěn. Výstup bude obsahovat GCC pro kompilaci obou souborů. Zde nadřazený vzorek1.c id a sample2.c id je jiný, protože jsou rodič a dítě.
Závěr
V tomto článku jsme použili vidličku i exec samostatně a společně, abychom snadno porozuměli použití a konceptu. Doufám, že tento výukový program obsahuje dostatečný obsah, který povede k přístupu při zvyšování vašich znalostí.