În timp ce funcția exec () este utilizată pentru a schimba programul curent existent cu cel nou. Această înlocuire se face prin modificarea conținutului unui program sau a unui fișier. Deci, diferența dintre fork și exec este că fork creează un nou proces din procesul existent, iar exec este folosit pentru a înlocui programul existent prin crearea unui nou.
Condiții prealabile
Pentru a executa orice program c pe sistemul dvs. Linux, trebuie să instalăm câteva condiții prealabile pe acesta. Mergeți la terminal folosind metoda de comandă rapidă Ctrl + Alt + T. Acum scrieți următoarele comenzi pentru a instala paginile man.
$ sudo apt install manpages-dev
Va instala toate paginile corespunzătoare.
Pentru a rula un program pe Linux, trebuie să instalați un compilator de coduri. Acesta este folosit pentru a compila codul și a-l executa. În acest scop, vom instala depozite GCC în sistemul nostru.
$ sudo apt instalează GCC
Codificare cu exec în c
Deoarece am instalat paginile man în Linux, vom folosi următoarea comandă pentru a vedea descrierea referitoare la execut. Sintaxa principală a eșantionului este următoarea:
Sintaxă
Exec (nume de cale / fișier, argv);Aici am folosit „unistd.antetul h ”deoarece conține toate informațiile despre familiile funcției exec.
$ om exec
Acum, în imaginea citată mai sus, puteți observa tipurile de exec. Acestea sunt familia de funcții exec. Fiecare este pentru o funcție diferită, urmând aceeași bază, „exec.”
Exemplu: Acum, mergând mai departe, vom descrie funcționalitatea execut cu ajutorul unui exemplu. Vom lua o funcție de exec pentru a demonstra funcționarea sa, care este „execv.”În primul rând, vom crea două fișiere cu extensia„.c.”După crearea lor, vom scrie codurile respective în ele și le vom executa pentru a vedea rezultatul.
Luați în considerare un nume de fișier „sample4.c ”. Vă rugăm să îl deschideți și să utilizați următorul cod. În acest cod, am folosit execv într-un mod particular citat mai jos.
Execv („./ sample4copy ”, args);Prima parte conține noua cale a directorului, iar a doua parte prezintă matricea de argumente ca parametru pe care l-am trecut.
Eșantion4.c
În primul rând, am tipărit ID-ul procesului curent. În al doilea rând, am creat o matrice de caractere având NULL în final pentru terminare. În al treilea rând, am numit funcția sample4copy.
Sample4copy.cCând apelăm funcția exec (), imaginea procesului este schimbată. Imaginea de mai jos citată arată codul sample4copy.c.
Aici am folosit doar instrucțiuni de tipărire pentru a obține id-ul procesului curent.
Ieșirea codurilor respective poate fi obținută folosind următoarele comenzi.
$ GCC-o sample4 sample4.c$ GCC -o sample4copy sample4copy.c
$ ./ sample4
După cum am descris mai devreme, cuvântul „GCC” este folosit pentru a compila codul, iar după compilare, codul este executat cu succes.
Conform imaginii, PID-ul sample4.Fișierul c este afișat mai întâi așa cum a fost declarat înainte de apelul exec. Apoi, după ce funcția exec () este apelată, ambele instrucțiuni de tipărire ale fișierului sample4copy.c este executat acolo unde getpid () este utilizat pentru a obține id-ul procesului.
Codificare cu o furculiță în c
Funcția fork () creează procesul copil din procesul părinte. De asemenea, conține două anteturi, inclusiv informațiile despre furcă.
Sintaxă:
Pid_t furculiță (nul);Putem folosi pagina de manual pentru ajutor în utilizare
$ man furca
Exemplu: Acum ia în considerare un exemplu prin crearea unui fișier „sample3.c ”. Vom introduce codul în interiorul fișierului. Conform codului, am stabilit starea furcii ca furcă.
Eșantion3.c
Am folosit declarația „if-else” pentru a aplica condiția. Comenzile de imprimare simple sunt declarate aici pentru a ajuta la înțelegerea conceptului fork (). Forkrank este mai întâi declarat 0 și apoi -1. Cu un fork (), există acum două procese care funcționează simultan. Ieșirea poate fi obținută utilizând același cod, așa cum este folosit mai sus în exemplul execut.
$ GCC -o sample3.c$./ sample3
Rezultatul arată că procesul copil este executat mai devreme decât părintele când procesul părinte aștepta. Funcția de așteptare implică faptul că determină funcția părinte să aștepte, cu excepția cazului în care unul dintre toate procesele copil este terminat.
Apeluri sistem Fork și Exec în mod colectiv
Aici vom lua două fișiere numite „sample1.c ”și„ sample2.c ”. Mai întâi, deschideți fișierul sampl1.c și scrieți codul care este anexat mai jos în imagine. Am folosit sistemul fork () system-call aici; când se creează procesul copil, p va fi atribuit cu 0. În timp ce utilizați apelul de sistem exec, sample1.c va fi înlocuit cu sample2.c.
Eșantion1.c
Eșantion2.c
Similar cu exemplele discutate mai sus, fișierul sample2 va conține instrucțiunile printf în el. În eșantion1.c, prima comandă de tipărire este executată mai întâi, apoi se apelează funcția furcă, când p == 0, apoi se execută porțiunea copil și sample2.fișierul c va fi rulat. Ieșirea va conține GCC pentru a compila ambele fișiere. Aici eșantion părinte1.c id și sample2.c id este diferit deoarece sunt părinte și copil.
Concluzie
În acest articol, am folosit atât furca, cât și execuția separat și colectiv pentru a înțelege cu ușurință utilizarea și conceptul. Sper că acest tutorial conține conținut suficient care să ducă la acces în escaladarea cunoștințelor dvs.