Tuo tarpu „exec“) funkcija naudojama dabartinei programai pakeisti nauja. Šis pakeitimas atliekamas pakeičiant programos ar failo turinį. Taigi šakės ir „exec“ skirtumai yra tai, kad šakutė sukuria naują procesą iš esamo proceso, o „exec“ naudojama esamai programai pakeisti sukuriant naują.
Būtinos sąlygos
Norėdami vykdyti bet kurią „c“ programą „Linux“ sistemoje, turime įdiegti joje keletą išankstinių sąlygų. Eikite į terminalą naudodami sparčiųjų klavišų metodą „Ctrl“ + „Alt“ + T. Dabar įdiekite šias komandas, kad įdiegtumėte man puslapius.
$ sudo apt įdiekite manpages-dev
Ji įdiegs visus atitinkamus puslapius.
Žengdami į priekį, norėdami paleisti programą „Linux“, turite įdiegti kodų kompiliatorių. Tai naudojama kompiliuoti kodą ir jį vykdyti. Šiuo tikslu savo sistemoje įdiegsime GCC saugyklas.
$ sudo apt įdiekite GCC
Kodavimas su „exec“ c
Įdiegę „man“ puslapius „Linux“ sistemoje, naudosime šią komandą, kad pamatytume „exec“ aprašą. Pagrindinė pavyzdžio sintaksė yra tokia:
Sintaksė
„Exec“ (kelio pavadinimas / failas, argv);Čia mes panaudojome „unistd.h “antraštė, nes joje yra visa informacija apie„ exec “funkcijų šeimas.
$ man exec
Dabar aukščiau nurodytame paveikslėlyje galite stebėti „exec“ tipus. Tai yra „exec“ funkcijų šeima. Kiekvienas jų skirtas skirtingai funkcijai, vadovaujantis ta pačia baze „exec.“
Pavyzdys: Dabar, eidami toliau, pavyzdžio pagalba apibūdinsime „exec“ funkcionalumą. Norėdami parodyti jos veikimą, atliksime vieną „exec“ funkciją, tai yra „execv."Pirmiausia sukursime du failus su plėtiniu".c.„Po jų sukūrimo mes juose įrašysime atitinkamus kodus ir vykdysime, kad pamatytume rezultatą.
Apsvarstykite failo pavadinimą „sample4.c “. Atidarykite jį ir naudokite šį kodą. Šiame kode mes naudojome „execv“ tam tikru būdu, nurodytu žemiau.
Execv („./ sample4copy “, argumentai);Pirmoje dalyje yra naujas katalogo kelias, o antroje dalyje argumentų masyvas rodomas kaip parametras, kurį mes perdavėme.
Pavyzdys4.c
Visų pirma, atspausdinome dabartinio proceso ID. Antra, mes sukūrėme simbolių masyvą, kurio pabaigoje yra NULL. Trečia, mes paskambinome „sample4copy“ funkcija.
4 pavyzdžių kopija.cKai iškviečiame funkciją „exec“ (), proceso vaizdas keičiamas. Žemiau pateiktame paveikslėlyje pateikiamas „sample4copy“ kodas.c.
Čia mes naudojome tik atspausdintus teiginius, kad gautume dabartinio proceso ID.
Atitinkamų kodų išvestį galima gauti naudojant šias komandas.
$ GCC-o pavyzdys4 pavyzdys4.c$ GCC -o sample4copy sample4copy.c
$ ./ pavyzdys4
Kaip aprašėme anksčiau, kodui sudaryti naudojamas žodis „GCC“, o po sukūrimo kodas sėkmingai vykdomas.
Pagal vaizdą, 4 pavyzdžio PID.c failas rodomas pirmiausia toks, koks buvo deklaruotas prieš vykdant exec skambutį. Tada, iškvietus „exec“), abu failo „sample4copy“ spausdinimo teiginiai.c vykdomas ten, kur proceso ID gaunamas getpid ().
Kodavimas šakute c
Funkcija „šakutė“ () sukuria vaiko procesą iš tėvų proceso. Jame taip pat yra dvi antraštės, įskaitant informaciją apie šakutes.
Sintaksė:
Pid_t šakutė (niekinė);Mes galime naudoti vyro puslapį, kad galėtume naudoti
$ žmogaus šakutė
Pavyzdys: Dabar apsvarstykite pavyzdį sukurdami failą „sample3.c “. Įvesime kodą į failą. Pagal kodą šakės būseną nustatėme kaip forkrank.
Pavyzdys3.c
Sąlygai pritaikyti naudojome teiginį „jei-dar“. Čia pateikiamos paprastos spausdinimo komandos, padedančios suprasti šakės () koncepciją. Pirmiausia „Forkrank“ deklaruojamas kaip 0, o po to –1. Su šakute () dabar veikia du procesai, kurie veikia vienu metu. Išvestį galima gauti naudojant tą patį kodą, kuris buvo naudojamas aukščiau exec pavyzdyje.
$ GCC -o pavyzdys3.c$./ pavyzdys3
Išvestis rodo, kad antrinis procesas vykdomas anksčiau nei tėvas, kai tėvo procesas laukė. Laukimo funkcija reiškia, kad ji priverčia tėvų funkciją laukti, nebent vienas iš visų vaiko procesų bus nutrauktas.
„Fork and Exec“ sistema skambina kolektyviai
Čia paimsime du failus pavadinimu „sample1.c “ir„ pavyzdys2.c “. Pirmiausia atidarykite failą sampl1.c ir parašykite kodą, kuris yra pridėtas žemiau paveikslėlyje. Čia mes panaudojome „fork () system-call“; kai bus sukurtas vaiko procesas, p bus priskirtas 0. Naudojant „exec system-call“, pavyzdys1.c bus pakeistas 2 pavyzdžiu.c.
Pavyzdys1.c
Pavyzdys2.c
Panašiai kaip aukščiau aptarti pavyzdžiai, „sample2“ faile bus „printf“ sakiniai. Imtyje1.c, pirmiausia įvykdoma pirmoji spausdinimo komanda, tada iškviečiama šakės funkcija, kai p == 0, tada vykdoma antrinė dalis ir pavyzdys2.c failas bus paleistas. Išvestyje bus GCC, kad būtų galima kompiliuoti abu failus. Čia tėvų pavyzdys.c id ir pavyzdys2.c id skiriasi, nes jie yra tėvai ir vaikai.
Išvada
Šiame straipsnyje mes naudojome tiek šakę, tiek egzeką atskirai ir kartu, kad lengvai suprastume naudojimą ir koncepciją. Tikiuosi, kad šioje pamokoje yra pakankamai turinio, prie kurio bus suteikta galimybė išplėsti jūsų žinias.