Gaffel systemanrop i c

Gaffel systemanrop i c

“Det grunnleggende formålet med gaffelkommandometoden er å lage en eller flere barneprosesser; De nyopprettede barneprosessene kjøres samtidig med overordnet prosess som skapte disse barneprosessene ved hjelp av gaffeluttalelser. Den neste uttalelsen som blir fulgt av gaffelkommandoen vil bli utført av både barn og foreldreprosesser samtidig. De samme CPU -registreringene, programtelleren (PC) og åpne filer som foreldreprosesstilgangene brukes av barneprosessen. Gaffel -kommandoen tar ingen parameter som inngang.”

Nedenfor er listen over verdier som returneres etter gaffelmetoden:

  • Negativ verdi: Prosessen med å lage en barneprosess mislyktes.
  • Null: Barneprosessen som nettopp ble opprettet ble returnert.
  • Positiv verdi: Returnert til den som ringer eller foreldre med en positiv verdi. Den nylig genererte barneprosessens prosess -ID er inneholdt i verdien.

En ting å huske på er at gaffelen er en trådmetode; Derfor for å se resultatene; Du må kjøre prosessen på det lokale systemet. Gaffel -kommandoen kan kreve visse topptekst- eller bibliotekfiler, for eksempel SYS/TYPER.H og Unistd.h. Du må konfigurere et Linux- eller UNIX-basert operativsystem for å kjøre programmet fordi Fork-kommandoen ikke kan brukes i et Windows-miljø. Du må først bekrefte at GCC -kompilatoren er satt opp i operativsystemmiljøet. For å oppnå dette, må vi først starte terminalen og deretter legge inn kommandoen GCC -Versjon, som viser informasjonen som GCC -kompilatoren av versjon 11.2.0 er installert.

Før du jobber med C -kodebitene, bør du vedlikeholde og oppdatere systemet. Årsaken bak oppdateringen er å imøtekomme de kommende problemene relatert til de nyeste versjonene av Linux. Så prøv ut "oppdatering" -spørsmålet nedenfor og gjør Linux oppdatert.

Eksempel 1

La oss begynne med det enkleste og enkleste programmet, der vi bare bruker en enkelt gaffelmetode og en enkel utskriftserklæring. Programmene krevde overskriftsfiler som er oppført i de tre første linjene i koden. Gaffel () -metoden kalles i hovedmetodeens åpningslinje. Gaffel -kommandoen oppretter en barneprosess som samtidig utfører uttalelsen nedenfor. Som et resultat vil utskriftserklæringen vises to ganger på skallskjermen når programmet begynner å kjøre. La oss begynne å skrive kommandoen i miljøet til Ubuntu. Vi må opprette filen ved hjelp av Nano Editor, men du kan bruke ditt valg. Skriv inn kommandoen nedenfor for å opprette den nye filen:

Nano gaffelthread.c

Når redigereren åpner en fil i redigeringsmodus, er den tom, så vi må oppgi koden der før du lukker filen og lagrer den. Gaffel -kommandoen må være forut for en uttalelse som indikerer at barneprosessen vil bli startet etter denne kommandoen. Etter gaffelen vil utskriftserklæringen kjøres to ganger, en gang av overordnet prosess og deretter av den nyopprettede barneprosessen. Denne uttalelsen vil bare bli utført en gang.

#inkludere
#inkludere
#inkludere
int main ()
printf ("Før gaffelmetoden.\ n ");
gaffel();
printf ("barneprosess opprettet.\ n ");
retur 0;

Etter å ha lagret og lukket gaffeltheste.C -fil, vi må nå bruke GCC -kompilatoren for å kompilere C -filen og opprette utdatafilen ved å bruke kommandoen nedenfor.

GCC gaffelthread.C -o gaffelthread.ute

C -filen vil bli samlet av GCC -kompilatoren, og resultatene vil bli lagret til gaffelthread.ut fil. Imidlertid, hvis du ikke bruker -o -flagget, vil GCC -kompilatoren lagre utgangen til A.ut -filen, som er standardnavnet, etter sammenstilling. Bildet viser hvordan vi kan kompilere C -filen ved hjelp av kommandoen ovenfor.

Samlingsresultatene avslører at det ikke var noen syntaks eller semantiske feil i koden vår, noe som beviser at den hadde blitt samlet sammen og at utdatafilen hadde blitt generert med hell. Du kan se resultatene nå som utdatafilen er utført. Bare skriv den korte kommandoen nedenfor for å oppnå dette:

./gaffelthread.ute

Eksempel 2

I dette eksemplet vil vi telle forekomstene der et stykke kode som inneholder mange gaffel () linjer blir utført. Vi må skrive mange gaffelmetoder og endre den eksisterende koden. Du bør være klar over at antall ganger et stykke kode kjøres, avhenger av kraften til 2, antall ganger gaffeluttalelsen er skrevet. For eksempel, hvis gaffeluttalelsen er skrevet tre ganger, vil koden bli utført 2^3 = 8 ganger. Nedenfor er utdraget for den oppdaterte C -koden for en gaffeltsystemanrop.

#inkludere
#inkludere
#inkludere
int main ()
printf ("Før gaffelmetoden.\ n ");
int i = 0;
gaffel();
gaffel();
gaffel();
printf ("barneprosess opprettet: [%d] \ n", i);
i ++;
retur 0;

I koden over er det tre gaffeluttalelser, og før dem har vi erklært en variabel "i" av heltallstypen som vil bli brukt til å spore prosessen hver gaffeluttalelse oppretter. Denne variabelen vil også bli økt etter hver gaffeluttalelse og før returerklæringen. Siden koden er endret, la oss kompilere den ved hjelp av GCC -kompilatoren. Utgangsfilen genereres vellykket.

Som du kan se, har ikke variabelen “I” ikke blitt økt på noen måte fordi gaffeluttalelsen umiddelbart blir fulgt av en utskriftserklæring som skriver ut åtte ganger, noe som betyr at hver gaffeluttalelse inneholder en prosess som kjører den nevnte koden samtidig og bare bruker Én kopi av programmet, og forhindrer at ethvert trinn som finner sted i koden. Det er totalt åtte separate utskriftsmetoder som brukes til å skrive ut meldingen nedenfor. Som du ser, er det ingen økning. Fordi barneprosessen bare utfører en utskriftskommando.

Konklusjon

Det handlet om å bruke C “Fork” -systemanropet. Vi har prøvd forskjellige illustrasjoner for å få forskjellige utganger, og forskjellige metoder er blitt brukt. Hvis du vil få et fullt grep om C "gaffel" -systemanrop, kan du prøve å implementere de to ovennevnte eksemplene på forskjellige måter på slutten, og du er god til å gå.