Mens exec () -funksjonen brukes til å endre det eksisterende programmet med det nye. Denne erstatningen gjøres ved å gjøre endringer i innholdet i et program eller en fil. Ulikheten mellom gaffel og exec er at gaffel skaper en ny prosess fra den eksisterende prosessen, og exec brukes til å erstatte det eksisterende programmet ved å lage et nytt.
Forutsetninger
For å utføre et c-program på Linux-systemet ditt, må vi installere noen forutsetninger på det. Gå til terminalen ved å bruke snarveiemetoden Ctrl + Alt + T. Skriv nå følgende kommandoer for å installere mansidene.
$ sudo apt installer manpages-dev
Den vil installere alle de tilsvarende sidene.
For å kjøre et program på Linux, må du installere en kodekompilator. Det brukes til å kompilere koden og utføre den. For dette formålet vil vi installere GCC-arkiver i systemet vårt.
$ sudo apt installere GCC
Koding med exec i c
Da vi har installert mansidene i Linux, vil vi bruke følgende kommando for å se beskrivelsen angående exec. Den primære eksempelsyntaks er som følger:
Syntaks
Exec (stienavn / fil, argv);Her har vi brukt “unistd.h ”-hode da den inneholder all informasjon om familier med eksekveringsfunksjon.
$ man exec
Nå i det ovennevnte bildet kan du observere typer exec. Dette er familien av eksekveringsfunksjoner. Hver og en er for en annen funksjon som følger den samme basen, “exec.”
Eksempel: Nå, videre, vil vi beskrive funksjonaliteten til exec ved hjelp av et eksempel. Vi vil ta en funksjon av exec for å demonstrere hvordan den fungerer, som er “execv.”For det første vil vi lage to filer med utvidelsen av“.c.”Etter at de ble opprettet, vil vi skrive respektive koder i dem og utføre dem for å se resultatet.
Vurder et filnavn “sample4.c ”. Vennligst åpne den og bruk følgende kode. I denne koden har vi brukt execv på en spesiell måte sitert nedenfor.
Execv (“./ sample4copy ”, args);Den første delen inneholder den nye katalogbanen, og den andre delen viser argumentene som en parameter vi har passert.
Eksempel 4.c
Først og fremst har vi skrevet ut den nåværende prosessens id. For det andre har vi opprettet et tegnarray som har NULL til slutt for avslutningen. For det tredje har vi kalt funksjonen sample4copy.
Eksempel4kopi.cNår vi kaller exec-funksjonen (), endres prosessbildet. Nedenfor sitert bilde nedenfor viser koden for sample4copy.c.
Her har vi bare brukt utskriftsuttalelser for å få ID til den nåværende prosessen.
Utdataene fra de respektive kodene kan oppnås ved å bruke følgende kommandoer.
$ GCC-o prøve4 prøve4.c$ GCC -o sample4copy sample4copy.c
$ ./ prøve4
Som vi har beskrevet tidligere, brukes “GCC” -ordet til å kompilere koden, og etter kompilering blir koden vellykket.
I følge bildet, PID for sample4.c-filen vises først slik den ble erklært før exec-samtalen. Så etter at exec () -funksjonen er kalt, begge utskriftsuttalelsene til filen sample4copy.c utføres der getpid () brukes til å oppnå prosessens id.
Koding med en gaffel i c
Gaffel () -funksjonen lager barneprosessen fra foreldreprosessen. Den inneholder også to overskrifter, inkludert gaffelinformasjonen i den.
Syntaks:
Pid_t gaffel (ugyldig);Vi kan bruke mannesiden for å få hjelp til bruken
$ man gaffel
Eksempel: Vurder nå et eksempel ved å lage en fil “sample3.c ”. Vi legger inn koden i filen. I følge koden har vi satt gaffelstatusen som forkrank.
Eksempel 3.c
Vi har brukt "if-else" -uttalelsen for å anvende tilstanden. Enkle utskriftskommandoer er erklært her for å hjelpe til med å forstå begrepet fork (). Forkrank blir først erklært som 0 og deretter -1. Med en gaffel () er det nå to prosesser som fungerer samtidig. Output kan oppnås ved å bruke samme kode, som brukt ovenfor i exec-eksempel.
$ GCC -o prøve3.c$./ prøve3
Utgangen viser at underordnet prosess utføres tidligere enn foreldrene når foreldreprosessen ventet. Ventefunksjonen innebærer at den får foreldrefunksjonen til å vente med mindre en av alle barneprosessene avsluttes.
Gaffel- og Exec-systemanrop kollektivt
Her tar vi to filer kalt “sample1.c "og" sample2.c ”. Åpne først filsampl1.c og skriv koden som er lagt ved nedenfor i bildet. Vi har brukt fork () systemanrop her; når barnet prosessen er opprettet, vil p bli tildelt 0. Mens du bruker exec systemanrop, er prøven 1.c vil bli erstattet med sample2.c.
Eksempel 1.c
Eksempel2.c
I likhet med eksemplene som er diskutert ovenfor, vil sample2-filen inneholde printf-setningene i den. I prøve1.c, den første utskriftskommandoen blir utført først, deretter kalles gaffelfunksjonen, når p == 0, så blir underordnet del utført og sample2.c-fil kjøres. Utgangen vil inneholde GCC for å kompilere begge filene. Her foreldreeksempel1.c id og sample2.ID er forskjellig fordi de er foreldre og barn.
Konklusjon
I denne artikkelen har vi brukt både gaffel og eksekvering hver for seg og samlet for å forstå bruken og konseptet enkelt. Jeg håper denne veiledningen inneholder tilstrekkelig innhold som vil føre til tilgang til å øke din kunnskap.