Kódování vidličkou a spuštění příkladem v c

Coding With Fork Exec Example C



Název našeho článku obsahuje dvě různé funkce jazyka C, které se vyskytují při spouštění jakéhokoli programu v našem systému. Bohužel v C. existuje nulová možnost výskytu více než jednoho programu současně. V určitý čas se může stát pouze jeden úkol, což znamená, že neumožňuje spuštění souběžných programů. Způsobí to, že budete čekat na dokončení jednoho procesu, aby se spustil ten druhý. Abyste se tomuto problému při řešení potíží vyhnuli, možná budete muset svůj program dobře rozvinout a být dobrým vývojářem. Linux fork () se používá k překonání čekání a povolení souběžnosti ve vašem systému. Pomáhá při duplikaci nového procesu a vytváří nový voláním duplikovaného procesu. Nový proces je podřízený proces a předchozí se nazývá nadřazený proces.

Zatímco funkce exec () se používá ke změně aktuálního stávajícího programu na nový. Tato náhrada se provádí změnami obsahu programu nebo souboru. Odlišnost mezi fork a exec 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

Abychom ve vašem systému Linux mohli spustit jakýkoli program c, musíme do něj nainstalovat nějaké předpoklady. Přejděte na terminál pomocí zkratkové metody Ctrl+Alt+T. Nyní pro instalaci manuálových stránek napište následující příkazy.



$sudovýstižnýNainstalujtemanpages-dev



Nainstaluje všechny odpovídající stránky.





Chcete -li pokračovat v programu, musíte v systému Linux nainstalovat kompilátor kódu. To se používá ke kompilaci kódu a jeho spuštění. Za tímto účelem nainstalujeme do našeho systému úložiště GCC.

$sudovýstižnýNainstalujteGCC



Kódování s exec v c

Když jsme nainstalovali manuálové stránky v Linuxu, použijeme následující příkaz, abychom viděli popis týkající se exec. Primární ukázková syntaxe je následující:

Syntax

Exec(název cesty/soubor, argv);

Zde jsme použili záhlaví unistd.h, protože obsahuje všechny informace o rodinách funkce exec.

$muž vykon

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í, dále, popíšeme pomocí příkladu funkčnost exec. Vezmeme jednu funkci exec, abychom ukázali 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 spustíme 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 ukazuje pole argumentů jako parametr, který jsme předali.

Ukázka 4.c

Nejprve jsme vytiskli ID aktuálního procesu. Za druhé, vytvořili jsme pole znaků, které má na konci NULL pro ukončení. Za třetí jsme nazvali funkci sample4copy.

Sample4copy.c

Když zavoláme funkci exec (), obraz procesu se změní. Níže citovaný obrázek níže ukazuje kód sample4copy.c.

Zde jsme pro získání ID aktuálního procesu použili pouze tiskové příkazy.

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
$./ukázka 4

Jak jsme již dříve popsali, ke kompilaci kódu se používá slovo GCC a po kompilaci je kód úspěšně spuštěn.

Podle obrázku je nejprve zobrazen PID souboru sample4.c, jak byl deklarován před voláním exec. Poté, co je volána funkce exec (), jsou spuštěny oba tiskové příkazy souboru sample4copy.c, kde je getpid () použit 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 vidlici v něm.

Syntax:

Vidlice Pid_t(prázdné);

Můžeme použít manuálovou stránku jako pomoc při používání

$mužVidlička

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ázka 3.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ý byl použit výše v příkladu exec.

$ GCC –o ukázka3.c
$./ukázka 3

Výstup ukazuje, že podřízený proces je spuštěn dříve než nadřazený, když nadřazený proces čekal. Funkce čekání znamená, že způsobí, že nadřazená funkce čeká, pokud není ukončen jeden ze všech podřízených procesů.

Systémová volání Fork a Exec společně

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í exec system-call bude sample1.c nahrazeno sample2.c.

Ukázka 1.c

Ukázka2.c

Podobně jako v příkladech diskutovaných výše bude soubor sample2 obsahovat příkazy printf. V sample1.c se nejprve provede první příkaz tisku, poté se zavolá funkce fork, když p == 0, potom se provede podřízená část a spustí se soubor sample2.c. Výstup bude obsahovat GCC pro kompilaci obou souborů. Zde se ID rodičů sample1.c a ID vzorku2.c liší, protože jsou rodičem a podřízeným.

Závěr

V tomto článku jsme použili jak fork, tak exec samostatně a společně, abychom snadno porozuměli použití a konceptu. Doufám, že tento návod obsahuje dostatečný obsah, který povede k přístupu při eskalaci vašich znalostí.