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.cKada 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.