Kodavimas naudojant šakutę ir vykdymą pagal pavyzdį c

Coding With Fork Exec Example C



Mūsų straipsnio pavadinime yra dvi skirtingos C kalbos funkcijos, atsirandančios vykdant bet kurią mūsų sistemos programą. Deja, nėra jokios galimybės vienu metu įvykdyti daugiau nei vieną programą C. Tik tam tikru metu gali įvykti tik viena užduotis, o tai reiškia, kad ji neleidžia vykdyti lygiagrečių programų. Dėl to turite laukti, kol bus baigtas vienas procesas, kad galėtumėte atlikti kitą. Kad išvengtumėte šios trikčių šalinimo problemos, jums gali tekti gerai sukurti savo programą, nes esate geras kūrėjas. „Linux fork“ () naudojama norint įveikti laukimą ir leisti sutapti jūsų sistemoje. Tai padeda dubliuoti naują procesą ir sukuria naują, paskambinus dubliuotam procesui. Naujas procesas yra antrinis procesas, o ankstesnis vadinamas pirminiu procesu.

Funkcija exec () naudojama dabartinei esamai programai pakeisti nauja. Šis pakeitimas atliekamas keičiant programos ar failo turinį. Taigi šakės ir vykdytojo skirtumas yra tas, kad šakutė sukuria naują procesą iš esamo proceso, o „exec“ naudojama pakeisti esamą programą sukuriant naują.







Būtinos sąlygos

Norėdami vykdyti bet kokią c programą jūsų „Linux“ sistemoje, turime įdiegti tam tikras išankstines sąlygas. Eikite į terminalą naudodami nuorodų metodą Ctrl+Alt+T. Dabar parašykite šias komandas, kad įdiegtumėte pagrindinius puslapius.



$sudotinkamasdiegtimanpages-dev



Jis įdiegs visus atitinkamus puslapius.





Norėdami paleisti programą „Linux“, turite įdiegti kodo kompiliatorių. Jis naudojamas kodui surinkti ir jį vykdyti. Šiuo tikslu savo sistemoje įdiegsime PĮBT saugyklas.

$sudotinkamasdiegtiPersijos įlankos bendradarbiavimo taryba



Kodavimas su exec c

Įdiegę „man“ puslapius „Linux“, naudosime šią komandą, kad pamatytume vykdymo aprašymą. Pagrindinė imties sintaksė yra tokia:

Sintaksė

Vykdyti(kelio pavadinimas/failą, argv);

Čia mes panaudojome antraštę unistd.h, nes joje yra visa informacija apie vykdymo funkcijos šeimas.

$vyras vykd

Dabar aukščiau paminėtame paveikslėlyje galite stebėti vykdymo tipus. Tai yra vykdymo funkcijų šeima. Kiekvienas iš jų yra skirtas kitai funkcijai pagal tą pačią bazę, vykd.

Pavyzdys: Dabar, eidami toliau, aprašysime „exec“ funkcionalumą naudodami pavyzdį. Mes imsimės vienos vykdomosios funkcijos, kad parodytume savo darbą, tai yra vykd. Pirmiausia sukursime du failus su plėtiniu .c. Sukūrę juos, mes į juos įrašysime atitinkamus kodus ir vykdysime juos, kad pamatytume rezultatą.

Apsvarstykite failo pavadinimą sample4.c. Atidarykite jį ir naudokite šį kodą. Šiame kode mes naudojome execv tam tikru būdu, kaip nurodyta toliau.

Vykd(./sample4copy, args);

Pirmoje dalyje yra naujas katalogo kelias, o antroje dalyje rodomas argumentų masyvas kaip mūsų perduotas parametras.

Pavyzdys4.c

Pirmiausia išspausdinome dabartinio proceso ID. Antra, mes sukūrėme simbolių masyvą, kurio pabaigoje buvo NULL. Trečia, mes pavadinome funkciją sample4copy.

4 pavyzdys.c

Kai iškviečiame vykdymo funkciją (), proceso vaizdas keičiamas. Žemiau pateiktame paveikslėlyje parodytas sample4copy kodas. C.

Čia mes naudojome tik spausdintinius teiginius, kad gautume dabartinio proceso ID.

Atitinkamų kodų išvestį galima gauti naudojant šias komandas.

$ GCC - o pavyzdys4 mėginys4.c
$ GCC –o sample4copy sample4copy.c
$./4 pavyzdys

Kaip jau aprašėme anksčiau, GCC žodis naudojamas kodui sudaryti, o po kompiliavimo kodas sėkmingai įvykdomas.

Pagal paveikslėlį pirmiausia parodomas failo sample4.c PID, koks jis buvo paskelbtas prieš vykdomąjį skambutį. Tada, kai iškviečiama funkcija exec (), įvykdomi abu failo sample4copy.c spausdinimo teiginiai, kur getpid () naudojamas proceso ID gauti.

Kodavimas šakute c

Funkcija šakutė () sukuria vaiko procesą iš tėvų proceso. Jame taip pat yra dvi antraštės, įskaitant šakutės informaciją.

Sintaksė:

Pid_t šakutė(tuštuma);

Naudojimui galime naudoti žinyno puslapį

$vyrasšakutė

Pavyzdys: Dabar apsvarstykite pavyzdį, sukurdami failą sample3.c. Įvesime kodą į failą. Pagal kodą mes nustatėme šakės būseną kaip šakutė.

Pavyzdys3.c

Sąlygai taikyti naudojome teiginį „jei-kitaip“. Čia pateikiamos paprastos spausdinimo komandos, padedančios suprasti šakės () sąvoką. „Forkrank“ pirmiausia deklaruojamas kaip 0, o po to --1. Su šakute () dabar yra du procesai, kurie veikia vienu metu. Išvestį galima gauti naudojant tą patį kodą, kuris buvo naudojamas aukščiau vykdymo pavyzdyje.

$ GCC - pavyzdys3.c
$./pavyzdys3

Išvestis rodo, kad antrinis procesas vykdomas anksčiau nei vienas iš tėvų, kai pirminis procesas laukė. Laukimo funkcija reiškia, kad dėl to pagrindinė funkcija laukia, nebent vienas iš visų antrinių procesų būtų nutrauktas.

„Fork and Exec“ sistema skambina bendrai

Čia paimsime du failus pavadinimu sample1.c ir sample2.c. Pirmiausia atidarykite failą sampl1.c ir parašykite žemiau esantį paveikslėlyje esantį kodą. Mes panaudojome „fork“ () sistemos skambutį; kai bus sukurtas antrinis procesas, p bus priskirtas 0. Naudojant „exec“ sistemos iškvietimą, „sample1.c“ bus pakeistas „sample2.c“.

Pavyzdys1.c

Pavyzdys2.c

Panašiai kaip ir aukščiau aptarti pavyzdžiai, faile sample2 bus printf teiginiai. Pavyzdyje 1.c pirmiausia vykdoma pirmoji spausdinimo komanda, tada iškviečiama šakės funkcija, kai p == 0, tada vykdoma antrinė dalis ir vykdomas failas sample2.c. Išvestyje bus GCC, kad būtų galima sudaryti abu failus. Čia pirminis pavyzdys1.c id ir pavyzdys2.c ID skiriasi, nes jie yra tėvai ir vaikai.

Išvada

Šiame straipsnyje mes naudojome šakę ir vykdymą atskirai ir kartu, kad lengvai suprastume naudojimą ir sąvoką. Tikiuosi, kad šioje mokymo programoje yra pakankamai turinio, kuris padės jums išplėsti savo žinias.