Programare C

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

Codificare cu furculiță și exec prin exemplu în 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 apărea mai multe programe la un moment dat în C. Doar o singură sarcină se poate întâmpla la un moment dat, 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 procesul 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 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.c

Câ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.

How to download and Play Sid Meier's Civilization VI on Linux
Introduction to the game Civilization 6 is a modern take on the classic concept introduced in the series of the Age of Empires games. The idea was fai...
How to Install and Play Doom on Linux
Introduction to Doom The Doom Series originated in the 90s after the release of the original Doom. It was an instant hit and from that time onwards th...
Vulkan for Linux Users
With each new generation of graphics cards, we see game developers push the limits of graphical fidelity and come one step closer to photorealism. But...