Kodiranje pomoću forka i exec primjerom u c

Coding With Fork Exec Example C



Naslov našeg članka sadrži dvije različite funkcije jezika C koje se pojavljuju tijekom izvođenja bilo kojeg programa u našem sustavu. Nažalost, ne postoji mogućnost istovremenog pojavljivanja više od jednog programa u C. Samo se jedan zadatak može dogoditi u određenom trenutku, što znači da ne dopušta pokretanje istodobnih programa. To uzrokuje da čekate dovršetak jednog procesa kako biste izvršili drugi. Da biste izbjegli ovaj problem s rješavanjem problema, možda ćete morati dobro razviti svoj program, budući da ste dobar programer. Linux fork () koristi se za prevladavanje čekanja i dopuštanje istodobnosti u vašem sustavu. Pomaže pri dupliciranju novog procesa i stvara novi pozivanjem dupliciranog procesa. Novi proces je podređeni proces, a prethodni se naziva roditeljskim procesom.

Dok se funkcija exec () koristi za promjenu trenutnog postojećeg programa s novim. Ova zamjena vrši se izmjenama sadržaja programa ili datoteke. Dakle, razlika između forka i execa je u tome što vilica stvara novi proces od postojećeg procesa, a exec se koristi za zamjenu postojećeg programa stvaranjem novog.







Preduvjeti

Da bismo izvršili bilo koji c program na vašem Linux sustavu, moramo na njega instalirati neke preduvjete. Idite na terminal pomoću metode prečaca Ctrl+Alt+T. Sada napišite sljedeće naredbe za instaliranje man stranica.



$sudoprikladaninstaliratimanpages-dev



Instalirat će sve odgovarajuće stranice.





Da biste krenuli naprijed, za pokretanje programa na Linuxu morate instalirati prevoditelj koda. To se koristi za sastavljanje koda i njegovo izvršavanje. U tu ćemo svrhu instalirati GCC spremišta u naš sustav.

$sudoprikladaninstaliratiGCC



Kodiranje s exec -om u c

Kako smo stranice za korisnike instalirali u Linux, upotrijebit ćemo sljedeću naredbu za pregled opisa exec -a. Primarna sintaksa uzorka je sljedeća:

Sintaksa

Izv(ime putanje/datoteka, argv);

Ovdje smo koristili zaglavlje unistd.h jer sadrži sve podatke o obiteljima exec funkcije.

$čovjek exec

Sada na gore citiranoj slici možete promatrati vrste exec. To su obitelj exec funkcija. Svaki je za drugu funkciju koja slijedi istu bazu, exec.

Primjer: Sada idemo dalje, opisat ćemo funkcionalnost execa uz pomoć primjera. Uzećemo jednu funkciju exec -a za demonstraciju njegovog rada, a to je execv. Prvo ćemo stvoriti dvije datoteke s nastavkom .c. Nakon njihovog stvaranja, u njih ćemo upisati odgovarajuće kodove i izvršiti ih kako bismo vidjeli rezultat.

Razmotrimo naziv datoteke sample4.c. Otvorite ga i upotrijebite sljedeći kôd. U ovom smo kodu koristili execv na poseban način, dolje citiran.

Execv(./sample4copy, args);

Prvi dio sadrži novi put direktorija, a drugi dio prikazuje niz argumenata kao parametar koji smo proslijedili.

Uzorak4.c

Prije svega, ispisali smo ID trenutnog procesa. Drugo, stvorili smo niz znakova koji na kraju ima NULL za završetak. Treće, nazvali smo funkciju sample4copy.

Sample4copy.c

Kada pozovemo exec funkciju (), slika procesa se mijenja. Ispod citirane slike ispod prikazan je kod sample4copy.c.

Ovdje smo koristili samo ispisne izjave da bismo dobili ID trenutnog procesa.

Izlaz odgovarajućih kodova može se dobiti pomoću sljedećih naredbi.

$ GCC – o uzorak4 uzorak4.c
$ GCC –o sample4copy sample4copy.c
$./uzorak4

Kao što smo ranije opisali, riječ GCC koristi se za sastavljanje koda, a nakon prevođenja kôd se uspješno izvršava.

Prema slici, PID datoteke sample4.c prvo se prikazuje kako je deklarirano prije poziva exec. Zatim se nakon pozivanja funkcije exec () izvršavaju oba ispisa ispisa datoteke sample4copy.c gdje se getpid () koristi za dobivanje ID -a procesa.

Kodiranje vilicom u c

Funkcija fork () stvara podređeni proces iz nadređenog procesa. Sadrži i dva zaglavlja, uključujući podatke o vilici u njemu.

Sintaksa:

Pid_t vilica(poništiti);

Za pomoć u korištenju možemo upotrijebiti man stranicu

$čovjekvilica

Primjer: Sada razmotrite primjer stvaranjem datoteke sample3.c. Kod ćemo unijeti unutar datoteke. Prema kodu, status vilice smo postavili kao forkrank.

Uzorak3.c

Za primjenu uvjeta koristili smo naredbu if-else. Ovdje su deklarirane jednostavne naredbe ispisa koje pomažu u razumijevanju koncepta fork (). Forkrank se prvo deklarira kao 0, a zatim -1. S fork (), sada postoje dva procesa koja rade istodobno. Izlaz se može dobiti korištenjem istog koda, koji je korišten gore u primjeru exec.

$ GCC –o uzorak3.c
$./uzorak3

Izlaz pokazuje da se podređeni proces izvodi ranije od roditelja kada je roditeljski proces čekao. Funkcija čekanja implicira da uzrokuje čekanje roditeljske funkcije, osim ako se jedan od svih podređenih procesa ne završi.

Fork i Exec sustav poziva kolektivno

Ovdje ćemo uzeti dvije datoteke pod nazivom sample1.c i sample2.c. Prvo otvorite datoteku sampl1.c i upišite kôd koji je dolje priložen na slici. Ovdje smo koristili sistemski poziv fork (); kada se stvori podređeni proces, p će biti dodijeljeno 0. Tijekom korištenja exec sistemskog poziva, uzorak1.c bit će zamijenjen uzorkom2.c.

Uzorak1.c

Uzorak2.c

Slično gore navedenim primjerima, datoteka sample2 sadržavat će ispis printf u njoj. U uzorku1.c prvo se izvršava prva naredba ispisa, zatim se poziva funkcija vilice, kada je p == 0, tada se izvršava podređeni dio i pokreće se datoteka uzorka2.c Izlaz će sadržavati GCC za kompajliranje obje datoteke. Ovdje se roditelj sample1.c id i sample2.c id razlikuju jer su roditelj i dijete.

Zaključak

U ovom smo članku koristili vilicu i exec odvojeno i zajedno kako bismo lakše razumjeli upotrebu i koncept. Nadam se da će ovaj vodič sadržavati dovoljno sadržaja koji će vam omogućiti pristup povećanju vašeg znanja.