Mens exec () -funktionen bruges til at ændre det nuværende eksisterende program med det nye. Denne udskiftning sker ved at foretage ændringer i indholdet af et program eller en fil. Forskellen mellem gaffel og exec er, at gaffel skaber en ny proces fra den eksisterende proces, og exec bruges til at erstatte det eksisterende program ved at oprette et nyt.
Forudsætninger
For at udføre et c-program på dit Linux-system skal vi installere nogle forudsætninger på det. Gå til terminalen ved hjælp af genvejsmetoden Ctrl + Alt + T. Skriv nu følgende kommandoer for at installere mandsiderne.
$ sudo apt install manpages-dev
Det installerer alle de tilsvarende sider.
Fremad for at køre et program på Linux skal du installere en kodekompilator. Det bruges til at kompilere koden og udføre den. Til dette formål installerer vi GCC-arkiver i vores system.
$ sudo apt installere GCC
Kodning med exec i c
Da vi har installeret mandsiderne i Linux, bruger vi følgende kommando til at se beskrivelsen vedrørende exec. Den primære eksempelsyntaks er som følger:
Syntaks
Exec (stienavn / fil, argv);Her har vi brugt “unistd.h ”-overskrift, da den indeholder al information om familier med eksekveringsfunktion.
$ mand exec
Nu i det ovennævnte billede kan du observere typerne af udførelse. Disse er familien af exec-funktioner. Hver enkelt er til en anden funktion, der følger den samme base, ”exec.”
Eksempel: Nu bevæger vi os videre og beskriver funktionaliteten af exec ved hjælp af et eksempel. Vi vil tage en funktion af exec for at demonstrere dens arbejde, som er “execv.”For det første opretter vi to filer med udvidelsen af“.c.”Efter oprettelsen vil vi skrive respektive koder i dem og udføre dem for at se resultatet.
Overvej et filnavn “sample4.c ”. Åbn den og brug følgende kode. I denne kode har vi brugt execv på en bestemt måde, der er citeret nedenfor.
Execv (“./ sample4copy ”, args);Den første del indeholder den nye biblioteksti, og den anden del viser argumentarrayet som en parameter, vi har bestået.
Prøve 4.c
Først og fremmest har vi udskrevet den aktuelle proces-id. For det andet har vi oprettet et tegnarray med NULL til sidst til opsigelsen. For det tredje har vi kaldt sample4copy-funktionen.
Prøve4kopi.cNår vi kalder exec-funktionen (), ændres procesbilledet. Nedenfor citeret billede nedenfor viser koden til sample4copy.c.
Her har vi kun brugt udskriftserklæringer for at få id'et for den aktuelle proces.
Outputtet fra de respektive koder kan opnås ved hjælp af følgende kommandoer.
$ GCC-o prøve4 prøve4.c$ GCC -o sample4copy sample4copy.c
$ ./ prøve4
Som vi har beskrevet tidligere, bruges “GCC” -ordet til at kompilere koden, og efter kompilering udføres koden med succes.
Ifølge billedet, PID for sample4.c-filen vises først, da den blev erklæret før exec-opkaldet. Derefter efter at exec () -funktionen kaldes, skal begge udskriftserklæringerne for fil sample4copy.c udføres, hvor getpid () bruges til at opnå procesens id.
Kodning med en gaffel i c
Fork () -funktionen opretter barneprocessen fra den overordnede proces. Den indeholder også to overskrifter, inklusive gaffeloplysningerne i den.
Syntaks:
Pid_t gaffel (ugyldig);Vi kan bruge mandsiden til hjælp til brugen
$ mand gaffel
Eksempel: Overvej nu et eksempel ved at oprette en fil “sample3.c ”. Vi indtaster koden inde i filen. I henhold til koden har vi indstillet gaffelstatus som forkrank.
Prøve 3.c
Vi har brugt “if-else” -erklæringen til at anvende betingelsen. Her erklæres enkle udskriftskommandoer for at hjælpe med at forstå begrebet fork (). Forkrank erklæres først som 0 og derefter -1. Med en gaffel () er der nu to processer, der fungerer samtidigt. Output kan opnås ved hjælp af den samme kode, som brugt ovenfor i exec-eksemplet.
$ GCC -o prøve3.c$./ prøve3
Outputtet viser, at den underordnede proces udføres tidligere end den overordnede, da den overordnede proces ventede. Ventefunktionen indebærer, at den får den overordnede funktion til at vente, medmindre en af alle barnets processer afsluttes.
Gaffel- og Exec-systemopkald kollektivt
Her tager vi to filer med navnet “sample1.c "og" prøve2.c ”. Åbn først filsampl1.c og skriv koden, der er vedhæftet nedenfor i billedet. Vi har brugt fork () systemkald her; når barneprocessen oprettes, tildeles p 0. Mens du bruger exec-systemopkald, er prøven1.c erstattes med prøve2.c.
Prøve 1.c
Prøve2.c
I lighed med eksemplerne beskrevet ovenfor vil sample2-filen indeholde printf-udsagnene i den. I prøve1.c, den første udskrivningskommando udføres først, derefter kaldes gaffelfunktionen, når p == 0, så udføres underdel og prøve2.c-fil køres. Outputtet indeholder GCC for at kompilere begge filer. Her overordnet prøve1.c id og prøve2.id er anderledes, fordi de er forældre og barn.
Konklusion
I denne artikel har vi brugt både fork og exec separat og kollektivt for let at forstå brugen og konceptet. Jeg håber, at denne vejledning indeholder tilstrækkeligt indhold, der vil føre til adgang til at eskalere din viden.