Koding med gaffel og exec ved eksempel i C

Koding med gaffel og exec ved eksempel i C
Tittelen på artikkelen vår inneholder to forskjellige funksjoner av C -språket som oppstår mens du kjører et program i systemet vårt. Dessverre er det null mulighet for å oppstå mer enn ett program om gangen i C. Bare en enkelt oppgave kan skje på et bestemt tidspunkt, noe som betyr at den ikke tillater samtidige programmer å kjøre. Det får deg til å vente på fullføringen av en prosess for å utføre den andre. For å unngå dette feilsøkingsproblemet, kan det hende du må utvikle programmet ditt på en god måte, være en god utvikler. Linux Fork () brukes til å overvinne ventetiden og for å tillate samtidighet i systemet ditt. Det hjelper med å duplisere en ny prosess og oppretter en ny ved å ringe den dupliserte prosessen. Den nye prosessen er barneprosessen, og den forrige kalles overordnet prosess.

Mens exec () -funksjonen brukes til å endre det nåværende eksisterende programmet med det nye. Denne erstatningen gjøres ved å gjøre endringer i innholdet i et program eller en fil. Så 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 ethvert C -program på Linux -systemet ditt, må vi installere noen forutsetninger på det. Gå til terminalen ved å bruke hurtigmetoden Ctrl+ALT+T. Skriv nå følgende kommandoer for å installere mannssidene.

$ sudo apt installer manpages-dev

Den vil installere alle tilsvarende sidene.

For å komme videre, for å kjøre et program på Linux, må du installere en kodekompilator. Som brukes til å kompilere koden og utføre den. For dette formålet vil vi installere GCC -depoter i systemet vårt.

$ sudo apt install GCC

Koding med exec i c

Siden vi har installert mannssidene i Linux, vil vi bruke følgende kommando for å se beskrivelsen angående exec. Den primære prøvesyntaksen er som følger:

Syntaks

Exec (pathname/file, argv);

Her har vi brukt “Unistd.H ”header da den inneholder all informasjon fra Families of Exec -funksjon.

$ Man exec

Nå i det ovennevnte bildet, kan du observere hvilke typer exec. Dette er familien av exec -funksjoner. Hver og en er for en annen funksjon etter samme base, “Exec.”

Eksempel: Nå, når vi beveger oss videre, vil vi beskrive funksjonaliteten til EXEC ved hjelp av et eksempel. Vi vil ta en funksjon av exec for å demonstrere dens arbeid, som er “execv.”For det første vil vi lage to filer med utvidelsen av“.c.”Etter opprettelsen av dem, vil vi skrive respektive koder i dem og utføre dem for å se resultatet.

Vurder et filnavn “Eksempel4.C ”. Vennligst åpne den og bruk følgende kode. I denne koden har vi brukt execv på en bestemt måte som er sitert nedenfor.

Execv (“./prøve4copy ”, args);

Den første delen inneholder den nye katalogstien, og den andre delen viser argumenter -arrayen som en parameter vi har bestått.

Prøve4.c

Først av alt har vi skrevet ut den nåværende prosessens ID. For det andre har vi laget en karaktergruppe som har null til slutt for avslutningen. For det tredje har vi kalt Sample4Copy -funksjonen.

Prøve4copy.c

Når vi kaller EXEC -funksjonen (), endres prosessbildet. Nedenfor sitert bilde nedenfor viser koden til prøve4Copy.c.

Her har vi bare brukt utskriftsuttalelser for å få ID for den nåværende prosessen.

Utgangen 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 sammenstilling blir koden utført vellykket.

I følge bildet er PID -en til Sample4.C -filen vises først som den ble erklært for Exec -samtalen. Etter at Exec () -funksjonen er kalt, er både utskriftsuttalelsene for filprøve4Copy.c utføres der getpid () brukes til å oppnå prosessens ID.

Koding med en gaffel i C

Gaffel () -funksjonen skaper barneprosessen fra overordnet prosess. Den inneholder også to overskrifter, inkludert gaffelinformasjonen i den.

Syntaks:

Pid_t gaffel (tomrom);

Vi kan bruke Man -siden til hjelp i bruken

$ mann gaffel

Eksempel: Tenk nå på et eksempel ved å lage en fil “Sample3.C ”. Vi skriver inn koden i filen. I følge koden har vi satt gaffelstatus som gaffelrank.

Prøve3.c

Vi har brukt "if-elv" -uttalelsen for å anvende tilstanden. Enkle utskriftskommandoer er erklært her for å hjelpe til med forståelsen av gaffel () -konseptet. Forkrank blir først erklært som 0 og deretter -1. Med en gaffel () er det nå to prosesser som fungerer samtidig. Utgang kan oppnås ved å bruke samme kode, som brukt ovenfor i EXEC -eksempel.

$ Gcc -o prøve3.c
$./prøve3

Produksjonen viser at barneprosessen blir utført tidligere enn foreldrene når overordnede prosessen ventet. Ventfunksjonen innebærer at den får foreldrefunksjonen til å vente med mindre en av alle barneprosessene avsluttes.

Gaffel- og exec -system ringer samlet

Her tar vi to filer som heter “Sample1.C ”og“ Sample2.C ”. Åpne først filen sampl1.C og skriv koden som er lagt ned nedenfor på bildet. Vi har brukt gaffel () systemanrop her; Når barneprosessen opprettes, blir P tildelt med 0. Mens du bruker Exec System-Call, Sample1.C vil bli erstattet med prøve2.c.

Prøve1.c

Prøve2.c

I likhet med eksemplene omtalt ovenfor, vil Exply2 -filen inneholde Printf -setningene i den. I prøve1.C, den første utskriftskommandoen utføres først, deretter kalles gaffelfunksjonen, når p == 0, deretter utføres barnedel og prøve2.C -fil blir kjørt. Utgangen vil inneholde GCC for å kompilere begge filene. Her overordnede prøve1.C id og prøve2.C id er annerledes fordi de er foreldre og barn.

Konklusjon

I denne artikkelen har vi brukt både gaffel og exec separat og samlet for å forstå bruken og konseptet enkelt. Jeg håper denne opplæringen inneholder tilstrekkelig innhold som vil føre til tilgang i eskalerende kunnskapen din.