Funktsiooni exec () kasutatakse praeguse olemasoleva programmi uueks muutmiseks. See asendamine toimub programmi või faili sisusse muudatuste tegemisega. Nii et kahvli ja execi erinevused seisnevad selles, et fork loob olemasolevast protsessist uue protsessi ja execit kasutatakse olemasoleva programmi asendamiseks uue loomisega.
Eeldused
Mis tahes c-programmi käivitamiseks teie Linuxi süsteemis peame sellele installima mõned eeldused. Minge terminali, kasutades kiirklahvi Ctrl + Alt + T. Nüüd kirjutage manuslehtede installimiseks järgmised käsud.
$ sudo apt install manpages-dev
See installib kõik vastavad lehed.
Edasi liikudes peate programmi Linuxis käivitamiseks installima koodikompilaatori. Seda kasutatakse koodi kompileerimiseks ja selle käivitamiseks. Sel eesmärgil paigaldame oma süsteemi GCC hoidlad.
$ sudo apt installige GCC
Kodeerimine exec-iga c-s
Kuna oleme manuslehed Linuxi installinud, kasutame execi kirjelduse nägemiseks järgmist käsku. Esmane proovisüntaks on järgmine:
Süntaks
Exec (tee nimi / fail, argv);Siin oleme kasutanud „unistd.h ”päis, kuna see sisaldab kogu teavet exec-funktsioonide perekondade kohta.
$ mees exec
Nüüd ülaltoodud pildil saate jälgida execi tüüpe. Need on exec-funktsioonide perekond. Igaüks neist on mõeldud erinevatele funktsioonidele, mis järgivad sama alust, exec.”
Näide: Nüüd edasi liikudes kirjeldame näite abil execi funktsionaalsust. Selle toimimise demonstreerimiseks võtame ühe exec-funktsiooni, milleks on „execv."Esiteks loome kaks faili laiendiga".c.”Pärast nende loomist kirjutame nendesse vastavad koodid ja täidame need, et tulemust näha.
Mõelge failinimele “sample4.c ”. Avage see ja kasutage järgmist koodi. Selles koodis oleme kasutanud execvi konkreetsel viisil, millele on viidatud allpool.
Execv (“./ sample4copy ”, argumendid);Esimene osa sisaldab uut kataloogitee ja teine osa näitab argumentide massiivi kui meie läbitud parameetrit.
Valim4.c
Esiteks oleme printinud praeguse protsessi ID. Teiseks oleme loonud tähemassiivi, mille lõpetamiseks on lõpuks NULL. Kolmandaks oleme kutsunud funktsiooni sample4copy.
Proovi4 koopia.cKui kutsume funktsiooni exec (), muudetakse protsessipilti. Allpool viidatud pildil on näidis sample4copy kood.c.
Siin kasutasime praeguse protsessi ID saamiseks ainult väljavõtteid.
Vastavate koodide väljundi saab järgmiste käskude abil.
$ GCC-o proov4 proov4.c$ GCC -o sample4copy sample4copy.c
$ ./ proov4
Nagu me varem kirjeldasime, kasutatakse koodi kompileerimiseks sõna "GCC" ja pärast kompileerimist käivitatakse kood edukalt.
Pildi järgi on valimi PID PID.c-faili näidatakse esimesena, nagu see deklareeriti enne exec-kõnet. Siis pärast funktsiooni exec () kutsumist on faili sample4copy mõlemad printimislaused.c käivitatakse seal, kus protsessi id-i saamiseks kasutatakse getpid ().
Hargiga kodeerimine c
Funktsioon fork () loob lapseprotsessi vanemaprotsessist. See sisaldab ka kahte päist, sealhulgas selles olevat kahvliinfot.
Süntaks:
Pid_t kahvel (tühine);Saame kasutada kasutusjuhendit abi saamiseks
$ mees kahvel
Näide: Nüüd kaaluge näidet, luues faili “sample3.c ”. Sisestame koodi faili sisse. Vastavalt koodile oleme kahvli olekuks määranud forkrank.
Proov3.c
Tingimuse rakendamiseks oleme kasutanud lauset “kui-veel”. Siin on deklareeritud lihtsad printimiskäsud, mis aitavad mõista kahvli () mõistet. Esiteks deklareeritakse Forkrank väärtuseks 0 ja seejärel -1. Kahvliga () on nüüd kaks samaaegselt töötavat protsessi. Väljundi saab saada sama koodi abil, nagu ülal exec-näites kasutatud.
$ GCC -o proov3.c$./ proov3
Väljund näitab, et alamprotsess viiakse läbi varem kui vanem, kui vanemaprotsess ootas. Ootefunktsioon tähendab, et see paneb vanemfunktsiooni ootama, kui üks kõigist alamprotsessidest ei ole lõpetatud.
Fork and Exec süsteem kutsub ühiselt
Siin võtame kaks faili nimega “sample1.c ”ja“ proov2.c ”. Esmalt avage fail sampl1.c ja kirjuta kood, mis on allpool pildil. Oleme siin kasutanud süsteemi fork () süsteemi; kui lapsprotsess on loodud, määratakse p väärtuseks 0. Exec system-calli kasutamise ajal valim1.c asendatakse valimiga2.c.
Proov1.c
Proov2.c
Sarnaselt ülalkirjeldatud näidetega sisaldab näidis2 fail selles printfi käske. Valimis1.c, täidetakse kõigepealt esimene printimiskäsk, seejärel kutsutakse kahvlifunktsioon, kui p == 0, siis täidetakse alamosa ja sample2.c fail käivitatakse. Väljund sisaldab mõlema faili kompileerimiseks GCC-d. Siin vanemvalim1.c id ja proov2.c id on erinev, kuna nad on vanemad ja lapsed.
Järeldus
Selles artiklis oleme kasutanud nii kahvlit kui ka execit eraldi ja ühiselt, et kasutusviisi ja kontseptsiooni hõlpsasti mõista. Loodan, et see õpetus sisaldab piisavalt sisu, mis viib teie teadmiste laiendamiseni juurde.