Koodaus haarukalla ja suorituksella esimerkillä c

Coding With Fork Exec Example C



Artikkelimme otsikko sisältää kaksi erilaista C -kielen toimintoa, joita esiintyy, kun suoritamme mitä tahansa järjestelmäämme. Valitettavasti C: ssä on nolla mahdollisuutta esiintyä useammalla kuin yhdellä ohjelmalla kerrallaan. Vain yksi tehtävä voi tapahtua tiettynä aikana, mikä tarkoittaa, että se ei salli samanaikaisten ohjelmien suorittamista. Se saa odottamaan yhden prosessin päättymistä toisen suorittamiseksi. Välttääksesi tämän vianmääritysongelman, sinun on ehkä kehitettävä ohjelmaa hyvällä tavalla ja oltava hyvä kehittäjä. Linux -haarukkaa () käytetään odottamisen voittamiseen ja rinnakkaisuuden sallimiseen järjestelmässäsi. Se auttaa kopioimaan uutta prosessia ja luo uuden kutsumalla päällekkäistä prosessia. Uusi prosessi on aliprosessi, ja edellistä kutsutaan pääprosessiksi.

Sen sijaan exec () -toimintoa käytetään nykyisen ohjelman vaihtamiseen uuteen. Tämä korvaus tehdään tekemällä muutoksia ohjelman tai tiedoston sisältöön. Haarukan ja suorittimen välinen ero on siis siinä, että haarukka luo uuden prosessin olemassa olevasta prosessista ja exec -ohjelmaa käytetään korvaamaan nykyinen ohjelma luomalla uusi.







Edellytykset

Jotta voimme suorittaa minkä tahansa c -ohjelman Linux -järjestelmässäsi, meidän on asennettava siihen joitakin edellytyksiä. Siirry päätelaitteeseen käyttämällä pikanäppäintä Ctrl+Alt+T. Kirjoita nyt seuraavat komennot man -sivujen asentamiseksi.



$sudosopivaAsentaamanpages-dev



Se asentaa kaikki vastaavat sivut.





Jatkaessasi ohjelman suorittamista Linuxissa sinun on asennettava koodikääntäjä. Sitä käytetään koodin kääntämiseen ja suorittamiseen. Tätä varten asennamme järjestelmäämme GCC -arkistot.

$sudosopivaAsentaaGCC



Koodaus exec -toiminnolla c

Kun olemme asentaneet man -sivut Linuxiin, käytämme seuraavaa komentoa nähdäksesi kuvauksen suorituksesta. Ensisijainen näytesyntaksi on seuraava:

Syntaksi

Exec(polunimi/tiedosto, argv);

Tässä olemme käyttäneet unistd.h -otsikkoa, koska se sisältää kaikki tiedot suoritustoiminnon perheistä.

$mies toteuttaja

Nyt yllä mainitussa kuvassa voit tarkkailla suoritustyyppejä. Nämä ovat suoritustehtävien perhe. Jokainen niistä on eri toiminnolle, joka seuraa samaa kantaa, exec.

Esimerkki: Nyt siirryttäessä pidemmälle kuvaamme execin toiminnallisuutta esimerkin avulla. Otamme yhden exec -toiminnon esittelemään sen toimintaa, joka on execv. Ensinnäkin luomme kaksi tiedostoa, joiden laajennus on .c. Luomisen jälkeen kirjoitamme niihin koodit ja suoritamme ne nähdäksesi tuloksen.

Harkitse tiedostonimeä sample4.c. Avaa se ja käytä seuraavaa koodia. Tässä koodissa olemme käyttäneet execv: tä alla mainitulla tavalla.

Toteutus(./sample4copy, args);

Ensimmäinen osa sisältää uuden hakemistopolun ja toinen osa näyttää argumenttiryhmän parametrina, jonka olemme siirtäneet.

Näyte4.c

Ensinnäkin olemme tulostaneet nykyisen prosessin tunnuksen. Toiseksi olemme luoneet merkkijonon, jonka lopussa on NULL. Kolmanneksi olemme kutsuneet sample4copy -funktiota.

Näyte4kopia. C

Kun kutsumme exec -funktiota (), prosessikuva muuttuu. Alla olevassa kuvassa näkyy sample4copy -koodi. C.

Tässä olemme käyttäneet vain tulostuslausekkeita saadaksemme nykyisen prosessin tunnuksen.

Vastaavien koodien tulos voidaan saada käyttämällä seuraavia komentoja.

$ GCC - o näyte4 näyte4.c
$ GCC –o sample4copy sample4copy.c
$./näyte4

Kuten edellä on kuvattu, koodin kääntämiseen käytetään GCC -sanaa, ja kääntämisen jälkeen koodi suoritetaan onnistuneesti.

Kuvan mukaan sample4.c -tiedoston PID näytetään ensin sellaisena kuin se oli ilmoitettu ennen exec -kutsua. Sitten kun exec () -funktio on kutsuttu, suoritetaan tiedoston sample4copy.c molemmat tulostuslausunnot, joissa getpid (): ää käytetään prosessin tunnuksen saamiseen.

Koodaus haarukalla c

Haarukka () -funktio luo aliprosessin vanhemman prosessista. Se sisältää myös kaksi otsikkoa, mukaan lukien haarukan tiedot.

Syntaksi:

Pid_t haarukka(mitätön);

Voimme käyttää man -sivua apuna käytössä

$mieshaarukka

Esimerkki: Harkitse nyt esimerkkiä luomalla tiedosto sample3.c. Kirjoitamme koodin tiedoston sisälle. Koodin mukaan olemme asettaneet haarukan tilaksi haarukan.

Näyte3.c

Olemme käyttäneet if-else-lauseketta ehdon soveltamiseen. Tässä esitetään yksinkertaiset tulostuskomennot, jotka auttavat ymmärtämään haarukan () käsitteen. Forkrank ilmoitetaan ensin 0: ksi ja sitten -1: ksi. Haarukalla () on nyt kaksi prosessia, jotka toimivat samanaikaisesti. Lähtö voidaan saada käyttämällä samaa koodia, jota käytettiin yllä exec -esimerkissä.

$ GCC –näyte3.c
$./näyte 3

Tulos osoittaa, että aliprosessi suoritetaan aikaisemmin kuin vanhempi, kun pääprosessi odotti. Odotusfunktio merkitsee sitä, että se saa vanhemman toiminnon odottamaan, ellei yhtäkään aliprosesseista lopeteta.

Fork and Exec -järjestelmä kutsuu kollektiivisesti

Tässä otamme kaksi tiedostoa nimeltä sample1.c ja sample2.c. Avaa ensin tiedosto sampl1.c ja kirjoita alla oleva kuvaan liitetty koodi. Olemme käyttäneet haarukan () järjestelmäkutsua täällä; kun aliprosessi on luotu, p: lle annetaan 0. Kun käytät exec system-callia, sample1.c korvataan näytteellä2.c.

Näyte1.c

Näyte2.c

Samanlainen kuin edellä käsitellyt esimerkit, sample2 -tiedosto sisältää printf -lausekkeet. Näytteessä 1.c suoritetaan ensimmäinen tulostuskomento ja sitten haarukointitoiminto, kun p == 0, sitten suoritetaan aliosa ja suoritetaan sample2.c -tiedosto. Tulos sisältää GCC: n molempien tiedostojen kääntämiseksi. Tässä vanhempi sample1.c id ja sample2.c id ovat erilaiset, koska ne ovat vanhempi ja lapsi.

Johtopäätös

Tässä artikkelissa olemme käyttäneet sekä haarukkaa että suoritusta erikseen ja yhdessä ymmärtääksemme käytön ja käsitteen helposti. Toivon, että tämä opetusohjelma sisältää riittävästi sisältöä, joka johtaa pääsyyn tietojesi laajentamiseen.