Codificare cu furculiță și exec prin exemplu în c

Coding With Fork Exec Example C



Titlul articolului nostru conține două funcții diferite ale limbajului C care apar în timpul rulării oricărui program din sistemul nostru. Din păcate, există nicio posibilitate de a avea mai multe programe la un moment dat în C. Doar o singură sarcină se poate întâmpla la un anumit moment, ceea ce înseamnă că nu permite rularea programelor concurente. Vă face să așteptați finalizarea unui proces pentru a-l executa pe celălalt. Pentru a evita această problemă de depanare, poate fi necesar să vă dezvoltați programul într-un mod bun, fiind un dezvoltator bun. Linux fork () este folosit pentru a depăși așteptarea și pentru a permite concurența în sistemul dvs. Ajută la duplicarea unui proces nou și creează unul nou apelând procesul duplicat. Noul proces este procesul copil, iar cel precedent se numește proces părinte.

Î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 utilizat 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.



$sudoaptinstalaremanpages-dev



Va instala toate paginile corespunzătoare.





Înainte, pentru a rula un program pe Linux, trebuie să instalați un compilator de cod. Acesta este folosit pentru a compila codul și a-l executa. În acest scop, vom instala depozite GCC în sistemul nostru.

$sudoaptinstalareGCC



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(calea/fişier, argv);

Aici am folosit antetul unistd.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 exec 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.c

Când apelăm funcția exec (), imaginea procesului este schimbată. Imaginea citată mai jos 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ă utilizând următoarele comenzi.

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$./proba4

După cum am descris mai devreme, cuvântul GCC este utilizat pentru a compila codul, iar după compilare, codul este executat cu succes.

Conform imaginii, PID-ul fișierului sample4.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 sunt executate 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

$omfurculiţă

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
$./proba3

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 furca () 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 acesta. În sample1.c, prima comandă de tipărire se execută mai întâi, apoi se apelează funcția fork, când p == 0, apoi se execută porțiunea copil și se va rula fișierul sample2.c. Ieșirea va conține GCC pentru a compila ambele fișiere. Aici părintele sample1.c id și sample2.c id sunt diferite deoarece sunt părinte și copil.

Concluzie

În acest articol, am folosit atât furca, cât și executarea 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.