Kodning med gaffel och exec med exempel i c

Coding With Fork Exec Example C



Titeln på vår artikel innehåller två olika funktioner på C -språket som uppstår när du kör något program i vårt system. Tyvärr finns det noll möjlighet att förekomma mer än ett program i taget i C. Endast en enda uppgift kan hända vid en viss tidpunkt, vilket innebär att det inte tillåter att samtidiga program körs. Det får dig att vänta på att den ena processen är klar för att utföra den andra. För att undvika detta felsökningsproblem kan du behöva utveckla ditt program på ett bra sätt, eftersom du är en bra utvecklare. Linux fork () används för att övervinna väntan och för att tillåta samtidighet i ditt system. Det hjälper till att duplicera en ny process och skapar en ny genom att ringa den dubblerade processen. Den nya processen är barnprocessen, och den föregående kallas förälderprocessen.

Medan funktionen exec () används för att ändra det nuvarande befintliga programmet med det nya. Denna ersättning görs genom att göra ändringar av innehållet i ett program eller en fil. Så skillnaden mellan gaffel och exec är att gaffel skapar en ny process från den befintliga processen, och exec används för att ersätta det befintliga programmet genom att skapa en ny.







Förkunskaper

För att köra ett c -program på ditt Linux -system måste vi installera några förutsättningar för det. Gå till terminalen med hjälp av genvägsmetoden Ctrl+Alt+T. Skriv nu följande kommandon för att installera man -sidorna.



$sudobenägenInstalleramanpages-dev



Det kommer att installera alla motsvarande sidor.





För att gå vidare, för att köra ett program på Linux, måste du installera en kodkompilerare. Det används för att kompilera koden och köra den. För detta ändamål kommer vi att installera GCC -arkiv i vårt system.

$sudobenägenInstalleraGCC



Kodning med exec i c

Eftersom vi har installerat man -sidorna i Linux kommer vi att använda följande kommando för att se beskrivningen av exec. Den primära provsyntaxen är följande:

Syntax

Exec(sökvägsnamn/fil, argv);

Här har vi använt unistd.h -rubriken eftersom den innehåller all information om familjer med exec -funktion.

$man exec

Nu i den ovan citerade bilden kan du observera typerna av exec. Dessa är familjen av exec -funktioner. Var och en är för en annan funktion som följer samma bas, exec.

Exempel: Nu, när vi går vidare, kommer vi att beskriva funktionaliteten hos exec med hjälp av ett exempel. Vi kommer att ta en funktion av exec för att demonstrera dess funktion, vilket är execv. För det första kommer vi att skapa två filer med tillägget .c. Efter skapandet kommer vi att skriva respektive koder i dem och köra dem för att se resultatet.

Tänk på ett filnamn sample4.c. Öppna den och använd följande kod. I denna kod har vi använt execv på ett särskilt sätt som anges nedan.

Execv(./sample4copy, args);

Den första delen innehåller den nya katalogsökvägen, och den andra delen visar argumentmatrisen som en parameter vi har passerat.

Prov4.c

Först och främst har vi skrivit ut den aktuella processens id. För det andra har vi skapat en teckenmatris med NULL i slutet för avslutningen. För det tredje har vi kallat sample4copy -funktionen.

Sample4copy.c

När vi kallar exec -funktionen () ändras processbilden. Nedanstående bild nedan visar koden för sample4copy.c.

Här har vi bara använt utskriftsuttag för att få id för den aktuella processen.

Utmatningen av respektive koder kan erhållas med följande kommandon.

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$./prov4

Som vi har beskrivit tidigare används GCC -ordet för att kompilera koden, och efter kompilering körs koden framgångsrikt.

Enligt bilden visas filen PID för sample4.c först som den deklarerades före exec -samtalet. Efter att exec () -funktionen har anropats körs båda utskriftssatserna för filen sample4copy.c där getpid () används för att få processens id.

Kodning med en gaffel i c

Funktionen fork () skapar barnprocessen från förälderprocessen. Den innehåller också två rubriker, inklusive gaffelinformationen i den.

Syntax:

Pid_t gaffel(tomhet);

Vi kan använda man -sidan för hjälp med användningen

$mangaffel

Exempel: Tänk nu på ett exempel genom att skapa en fil sample3.c. Vi anger koden i filen. Enligt koden har vi ställt in gaffelstatus som förkrank.

Prov3.c

Vi har använt if-else-uttalandet för att tillämpa villkoret. Enkla utskriftskommandon deklareras här för att hjälpa till att förstå gaffel () -konceptet. Forkrank deklareras först som 0 och sedan -1. Med en gaffel () finns det nu två processer som fungerar samtidigt. Utmatning kan erhållas genom att använda samma kod, som används ovan i exec -exempel.

$ GCC –o prov3.c
$./prov3

Utdata visar att barnprocessen körs tidigare än föräldern när förälderprocessen väntade. Väntefunktionen innebär att det får föräldrafunktionen att vänta om inte en av alla underordnade processer avslutas.

Gaffel- och Exec -system ringer kollektivt

Här tar vi två filer med namnet sample1.c och sample2.c. Öppna först filen sampl1.c och skriv koden som bifogas nedan i bilden. Vi har använt gaffel () system-call här; när barnprocessen skapas kommer p att tilldelas 0. Medan exec system-call används, kommer sample1.c att ersättas med sample2.c.

Prov1.c

Prov2.c

I likhet med exemplen som diskuterats ovan innehåller filen sample2 filen printf -satser i den. I sample1.c körs det första utskriftskommandot först, sedan kallas gaffelfunktionen, när p == 0, sedan körs underdelen och filen sample2.c körs. Utdata innehåller GCC för att kompilera båda filerna. Här är överordnad sample1.c id och sample2.c id annorlunda eftersom de är förälder och barn.

Slutsats

I denna artikel har vi använt både gaffel och exec separat och tillsammans för att enkelt förstå användningen och konceptet. Jag hoppas att denna handledning innehåller tillräckligt med innehåll som leder till åtkomst för att eskalera dina kunskaper.