C Programiranje

Kodiranje z vilicami in exec na primeru v c

Kodiranje z vilicami in exec na primeru v 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 v C-ju ni več možnosti, da se naenkrat pojavi več programov. V določenem času se lahko zgodi samo ena naloga, kar pomeni, da ne dovoljuje izvajanja sočasnih programov. Zaradi tega počakate na zaključek enega postopka, da izvedete drugega. Da bi se izognili tej težavi, boste morda morali svoj program razviti na dober način, saj ste 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 s klicem podvojenega procesa. Nov postopek je nadrejeni proces, prejšnji pa se imenuje nadrejeni postopek.

Funkcija exec () se uporablja za spreminjanje obstoječega programa z novim. Ta zamenjava se opravi s spremembami vsebine programa ali datoteke. Razlika med fork in exec je torej v tem, da fork ustvari nov postopek iz obstoječega, exec pa se uporablja za nadomestitev obstoječega programa z ustvarjanjem novega.

Pogoji

Če želite zagnati kateri koli program c v vašem sistemu Linux, moramo nanj namestiti nekaj predpogojev. Do terminala pojdite z bližnjico Ctrl + Alt + T. Zdaj napišite naslednje ukaze za namestitev strani z man.

$ sudo apt install manpages-dev

Namestila bo vse ustrezne strani.

Če želite zagnati program v Linuxu, morate namestiti prevajalnik kod. To se uporablja za prevajanje kode in njeno izvajanje. V ta namen bomo v naš sistem namestili skladišča GCC.

$ sudo apt namestite GCC

Kodiranje z exec v c

Ker smo v Linux namestili priročne strani, bomo z naslednjim ukazom videli opis glede exec. Primarna sintaksa vzorca je naslednja:

Sintaksa

Exec (ime / datoteka, argv);

Tu smo uporabili „unistd.glava h ", saj vsebuje vse informacije o družinah izvršilne funkcije.

$ man exec

Zdaj na zgoraj navedeni sliki lahko opazujete vrste exec. To so družine izvrševalnih funkcij. Vsak je namenjen drugačni funkciji, ki sledi isti osnovi, “exec."

Primer: Zdaj, ko gremo naprej, bomo s pomočjo primera opisali funkcionalnost exec. Za prikaz svojega delovanja bomo uporabili eno funkcijo exec, ki je »execv."Najprej bomo ustvarili dve datoteki s pripono".c.”Po njihovem ustvarjanju bomo vanje 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 execv uporabili na spodaj naveden način.

Execv („./ sample4copy ", argumenti);

Prvi del vsebuje novo pot do imenika, drugi del pa matriko argumentov kot parameter, ki smo ga poslali.

Vzorec4.c

Najprej smo natisnili ID trenutnega postopka. 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 navedena slika prikazuje kodo sample4copy.c.

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

Izhod ustreznih kod lahko dobite z naslednjimi ukazi.

$ GCC-o vzorec4 vzorec4.c
$ GCC -o sample4copy sample4copy.c
$ ./ vzorec4

Kot smo že opisali, se za prevajanje kode uporablja beseda »GCC«, ki se po prevajanju uspešno izvede.

Glede na sliko, PID vzorca4.Datoteka c je najprej prikazana, kot je bila deklarirana pred klicem exec. Potem, ko je poklicana funkcija exec (), sta oba stavka za tiskanje datoteke sample4copy.c se izvede tam, kjer se za pridobitev id-ja procesa uporablja getpid ().

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 (void);

Za pomoč pri uporabi lahko uporabimo man stran

$ man vilice

Primer: Zdaj si oglejte primer, tako da ustvarite datoteko »sample3.c ". Kodo bomo vnesli v datoteko. Glede na kodo smo status vilic nastavili kot vilice.

Vzorec3.c

Za uporabo pogoja smo uporabili stavek "če-drugače". Tu so navedeni preprosti ukazi za tiskanje, ki pomagajo pri razumevanju koncepta fork (). Forkrank se najprej navede kot 0 in nato -1. Z fork () sta zdaj dva procesa, ki delujeta sočasno. Rezultat je mogoče dobiti z uporabo iste kode, kot je bila uporabljena zgoraj v primeru exec.

$ GCC -o vzorec3.c
$./ vzorec3

Rezultat kaže, da se nadrejeni postopek izvede prej kot nadrejeni, ko je nadrejeni postopek čakal. Funkcija čakanja pomeni, da povzroči, da nadrejena funkcija čaka, razen če se zaključi eden od vseh podrejenih procesov.

Fork in Exec sistemski klici

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

Vzorec1.c

Vzorec2.c

Podobno kot zgoraj obravnavani primeri bo datoteka sample2 v sebi vsebovala izjave printf. V vzorcu1.c, najprej se izvede prvi ukaz za tiskanje, nato se pokliče funkcija vilice, ko je p == 0, nato se izvede podrejeni del in sample2.c datoteka bo zagnana. Izhod bo vseboval GCC za prevajanje obeh datotek. Tu nadrejeni vzorec1.c id in vzorec2.c id je drugačen, ker sta starša in otroka.

Zaključek

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

Najboljše igre z ročnim sledenjem
Oculus Quest je pred kratkim predstavil odlično idejo ročnega sledenja brez krmilnikov. Z vedno večjim številom iger in dejavnosti, ki izvajajo podpor...
Kako prikazati prekrivanje zaslonskega menija v celozaslonskih aplikacijah in igrah za Linux
Igranje celozaslonskih iger ali uporaba aplikacij v celozaslonskem načinu brez motenj vam lahko odreže ustrezne sistemske informacije, ki so vidne na ...
Top 5 kartic za zajemanje iger
Vsi smo v YouTubu videli in oboževali pretakanje iger. PewDiePie, Jakesepticye in Markiplier so le nekateri izmed najboljših igralcev, ki so zaslužili...