Codificació amb fork i exec per exemple al c

Coding With Fork Exec Example C



El títol del nostre article conté dues funcions diferents del llenguatge C que es produeixen mentre s'executa qualsevol programa del nostre sistema. Malauradament, no hi ha cap possibilitat que es produeixin més d’un programa a la vegada a C. Només es pot produir una sola tasca en un moment concret, cosa que significa que no permet executar programes simultanis. Fa esperar a la finalització d’un procés per executar l’altre. Per evitar aquest problema de resolució de problemes, és possible que hàgiu de desenvolupar el programa d'una bona manera, sent un bon desenvolupador. La forquilla Linux () s'utilitza per superar l'espera i permetre la simultaneïtat al vostre sistema. Ajuda a duplicar un procés nou i en crea un de nou trucant al procés duplicat. El nou procés és el procés fill i l’anterior s’anomena procés pare.

Mentre que, la funció exec () s'utilitza per canviar el programa existent actual pel nou. Aquesta substitució es fa modificant el contingut d’un programa o d’un fitxer. Per tant, la diferència entre fork i exec és que fork crea un procés nou a partir del procés existent, i exec s’utilitza per substituir el programa existent creant-ne un de nou.







Requisits previs

Per executar qualsevol programa c al vostre sistema Linux, hem d’instal·lar-hi alguns requisits previs. Aneu al terminal mitjançant el mètode de drecera Ctrl + Alt + T. Ara escriviu les ordres següents per instal·lar les pàgines de manual.



$suoapteinstal·larmanpages-dev



Instal·larà totes les pàgines corresponents.





Per avançar, per executar un programa a Linux, heu d’instal·lar un compilador de codi. S’utilitza per compilar el codi i executar-lo. Amb aquest propòsit, instal·larem repositoris GCC al nostre sistema.

$suoapteinstal·larGCC



Codificació amb exec al c

A mesura que hem instal·lat les pàgines man a Linux, utilitzarem l'ordre següent per veure la descripció de l'exec. La sintaxi de mostra principal és la següent:

Sintaxi

Exec(nom de ruta/dossier, argv);

Aquí hem utilitzat la capçalera unistd.h ja que conté tota la informació de les famílies de la funció exec.

$home exec

Ara, a la imatge esmentada anteriorment, podeu observar els tipus d'exec. Aquestes són la família de funcions exec. Cadascun té una funció diferent seguint la mateixa base, exec.

Exemple: Ara, avançant, descriurem la funcionalitat de exec amb l'ajut d'un exemple. Prendrem una funció de exec per demostrar el seu funcionament, que és execv. En primer lloc, crearem dos fitxers amb l'extensió de .c. Després de la seva creació, hi escriurem els codis respectius i els executarem per veure el resultat.

Penseu en un nom de fitxer sample4.c. Obriu-lo i utilitzeu el codi següent. En aquest codi, hem utilitzat execv d'una manera particular esmentada a continuació.

Execv(./sample4copy, args);

La primera part conté el nou camí d'accés del directori i la segona part mostra la matriu d'arguments com a paràmetre que hem passat.

Mostra4.c

En primer lloc, hem imprès l’identificador del procés actual. En segon lloc, hem creat una matriu de caràcters que té NULL al final per a la finalització. En tercer lloc, hem anomenat la funció sample4copy.

Sample4copy.c

Quan anomenem la funció exec (), es canvia la imatge del procés. A la imatge esmentada a continuació es mostra el codi de sample4copy.c.

Aquí només hem utilitzat declaracions d'impressió per obtenir l'identificador del procés actual.

La sortida dels codis respectius es pot obtenir utilitzant les ordres següents.

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

Com hem descrit anteriorment, la paraula GCC s'utilitza per compilar el codi i, després de compilar-lo, s'executa correctament.

Segons la imatge, primer es mostra el PID del fitxer sample4.c tal com es va declarar abans de la trucada exec. Després, després de cridar la funció exec (), s’executen les instruccions d’impressió del fitxer sample4copy.c on s’utilitza getpid () per obtenir l’identificador del procés.

Codificació amb una forquilla en c

La funció fork () crea el procés fill a partir del procés pare. També conté dues capçaleres, inclosa la informació de la bifurcació.

Sintaxi:

Forquilla Pid_t(buit);

Podem utilitzar la pàgina manual per obtenir ajuda en l’ús

$homeforquilla

Exemple: Ara considerem un exemple creant un fitxer sample3.c. Introduirem el codi dins del fitxer. Segons el codi, hem definit l’estat de la forquilla com a forkrank.

Mostra3.c

Hem utilitzat la sentència if-else per aplicar la condició. Aquí es declaren ordres d'impressió senzilles per ajudar a entendre el concepte fork (). Primer es declara que Forkrank és 0 i després -1. Amb un fork (), ara hi ha dos processos que funcionen simultàniament. La sortida es pot obtenir utilitzant el mateix codi, com s'utilitza a l'exemple anterior.

$ GCC –o sample3.c
$./mostra3

La sortida mostra que el procés fill s’executa abans del pare quan el procés pare esperava. La funció d'espera implica que fa esperar la funció pare tret que s'acabi un de tots els processos fills.

Trucades de sistema Fork i Exec col·lectivament

Aquí agafarem dos fitxers anomenats sample1.c i sample2.c. Primer, obriu el fitxer sampl1.c i escriviu el codi que s'afegeix a la imatge. Hem utilitzat el sistema fork () system-call aquí; quan es crea el procés fill, s'assignarà p amb 0. Mentre s'utilitza exec system-call, el sample1.c se substituirà per sample2.c.

Mostra1.c

Mostra2.c

De manera similar als exemples comentats anteriorment, el fitxer sample2 contindrà les instruccions printf. A sample1.c, primer s’executa la primera ordre d’impressió, després es crida a la funció fork, quan p == 0, llavors s’executa la part secundària i s’executarà el fitxer sample2.c. La sortida contindrà GCC per compilar tots dos fitxers. Aquí l’identificador sample1.c i l’identificador sample2.c són diferents perquè són pare i fill.

Conclusió

En aquest article, hem utilitzat tant fork com exec per separat i col·lectivament per entendre l’ús i el concepte fàcilment. Espero que aquest tutorial contingui prou contingut que us permetrà accedir a l’escalada del vostre coneixement.