Kodiranje z vilicami in exec na primer v c

Coding With Fork Exec Example C



Naslov našega članka vsebuje dve različni funkciji jezika C, ki se pojavita med izvajanjem katerega koli programa v našem sistemu. Na žalost ni možnosti, da bi se hkrati pojavil več kot en program v C. V določenem času se lahko zgodi samo ena naloga, kar pomeni, da ne dovoljuje izvajanja sočasnih programov. Zaradi tega počakate na dokončanje enega procesa, da izvedete drugega. Da bi se izognili tej težavi pri odpravljanju težav, boste morda morali dobro razviti svoj program in biti dober razvijalec. Linux fork () se uporablja za premagovanje čakanja in omogočanje sočasnosti v vašem sistemu. Pomaga pri podvajanju novega procesa in ustvari novega z klicem podvojenega procesa. Novi proces je podrejeni proces, prejšnji pa se imenuje starševski proces.

Medtem ko se funkcija exec () uporablja za spreminjanje obstoječega programa z novim. Ta zamenjava se izvede s spremembami vsebine programa ali datoteke. Tako je razlika med fork in exec v tem, da vilica ustvari nov proces iz obstoječega procesa, exec pa se uporablja za zamenjavo obstoječega programa z ustvarjanjem novega.







Predpogoji

Za izvedbo katerega koli programa c v vašem sistemu Linux moramo vanj namestiti nekaj predpogojev. Pojdite na terminal s pomočjo bližnjice Ctrl+Alt+T. Sedaj napišite naslednje ukaze za namestitev strani man.



$sudoaptnamestitemanpages-dev



Namestil bo vse ustrezne strani.





Če želite naprej, da zaženete program v Linuxu, morate namestiti prevajalnik kode. To se uporablja za sestavljanje kode in njeno izvedbo. V ta namen bomo v naš sistem namestili skladišča GCC.

$sudoaptnamestiteGCC



Kodiranje z exec v c

Ker smo strani man namestili v Linux, bomo za ogled opisa exec uporabili naslednji ukaz. Primarna vzorčna skladnja je naslednja:

Sintaksa

Izv(ime poti/mapa, argv);

Tu smo uporabili glavo unistd.h, saj vsebuje vse informacije o družinah funkcije exec.

$človek exec

Zdaj na zgoraj citirani sliki lahko opazujete vrste exec. To je družina funkcij exec. Vsak je za drugo funkcijo, ki sledi isti bazi, exec.

Primer: Zdaj, ko gremo dalje, bomo s pomočjo primera opisali funkcionalnost exec. Za prikaz njegovega delovanja bomo uporabili eno funkcijo exec, to je execv. Najprej bomo ustvarili dve datoteki s končnico .c. Po njihovem ustvarjanju bomo vanj zapisali ustrezne kode in jih izvedli, da bomo videli rezultat.

Razmislite o imenu datoteke sample4.c. Odprite ga in uporabite naslednjo kodo. V tej kodi smo uporabili execv na poseben način, naveden spodaj.

Execv(./sample4copy, args);

Prvi del vsebuje novo pot imenika, drugi del pa prikazuje niz argumentov kot parameter, ki smo ga prenesli.

Vzorec 4.c

Najprej smo natisnili ID trenutnega procesa. Drugič, za zaključek smo ustvarili niz znakov, ki ima na koncu NULL. Tretjič, poklicali smo funkcijo sample4copy.

Sample4copy.c

Ko pokličemo funkcijo exec (), se slika procesa spremeni. Spodaj navedena slika prikazuje kodo sample4copy.c.

Tu smo uporabili samo izjave za tiskanje, da dobimo ID trenutnega procesa.

Izhod ustreznih kod je mogoče dobiti z naslednjimi ukazi.

$ GCC - o vzorec 4 vzorec4.c
$ GCC –o sample4copy sample4copy.c
$./vzorec 4

Kot smo že opisali, se beseda GCC uporablja za sestavljanje kode, po prevajanju pa se koda uspešno izvede.

Glede na sliko se najprej prikaže PID datoteke sample4.c, kot je bila deklarirana pred klicem exec. Potem ko se pokliče funkcija exec (), se izvedeta obe izjavi o tiskanju datoteke sample4copy.c, kjer se getpid () uporablja za pridobitev ID -ja procesa.

Kodiranje z vilicami v c

Funkcija fork () ustvari podrejeni proces iz nadrejenega procesa. Vsebuje tudi dve glavi, vključno z informacijami o vilicah.

Sintaksa:

Vilice Pid_t(nično);

Za pomoč pri uporabi lahko uporabimo man stran

$človekvilice

Primer: Zdaj razmislite o primeru z ustvarjanjem datoteke sample3.c. Kodo bomo vnesli v datoteko. V skladu s kodo smo nastavili stanje vilic kot forkrank.

Vzorec 3.c

Za uporabo pogoja smo uporabili stavek if-else. Tu so razglašeni preprosti ukazi za tiskanje, ki pomagajo razumeti koncept fork (). Forkrank je najprej deklariran kot 0 in nato -1. S fork () zdaj obstajata dva procesa, ki delujeta hkrati. Izhod je mogoče dobiti z uporabo iste kode, kot je bila uporabljena zgoraj v primeru exec.

$ GCC –o vzorec3.c
$./vzorec 3

Izhod prikazuje, da se podrejeni proces izvede prej kot nadrejeni, ko je starševski proces čakal. Funkcija čakanja pomeni, da povzroči, da nadrejena funkcija počaka, razen če je eden od vseh podrejenih procesov zaključen.

Sistemski klici Fork in Exec Skupaj

Tu bomo vzeli dve datoteki z imenom sample1.c in sample2.c. Najprej odprite datoteko sampl1.c in napišite kodo, ki je priložena spodaj na sliki. Tukaj smo uporabili sistemski klic fork (); ko je ustvarjen podrejeni proces, bo p dodeljeno 0. Med uporabo exec sistemskega klica bo vzorec1.c nadomeščen z vzorcem2.c.

Vzorec 1.c

Vzorec 2.c

Podobno kot zgoraj obravnavani primeri bo datoteka sample2 vsebovala izjave printf. V vzorcu1.c se najprej izvede prvi ukaz za tiskanje, nato se pokliče funkcija vilic, ko je p == 0, se nato izvede podrejeni del in zažene datoteka sample2.c. Izhod bo vseboval GCC za sestavljanje obeh datotek. Tu sta nadrejena id vzorca1.c in ID vzorca2.c drugačna, ker sta starša in otrok.

Zaključek

V tem članku smo uporabili vilice in exec ločeno in skupaj za lažje razumevanje uporabe in koncepta. Upam, da ta vadnica vsebuje dovolj vsebine, ki vam bo omogočila dostop do stopnjevanja vašega znanja.