C Programmeerimine

Hargi ja execiga kodeerimine näites c

Hargi ja execiga kodeerimine näites c
Meie artikli pealkiri sisaldab kahte erinevat C-keele funktsiooni, mis ilmnevad meie süsteemis mis tahes programmi käivitamisel. Kahjuks pole C-s null võimalust korraga rohkem kui ühte programmi esineda. Kindlal ajal võib juhtuda ainult üks ülesanne, mis tähendab, et see ei luba samaaegseid programme käivitada. See paneb teid ootama ühe protsessi lõpuleviimist, et teine ​​käivitada. Selle tõrkeotsingu probleemi vältimiseks peate võib-olla arendama oma programmi heas mõttes, olles hea arendaja. Linuxi kahvlit () kasutatakse ootamise ületamiseks ja samaaegsuse lubamiseks teie süsteemis. See aitab dubleerida uut protsessi ja loob uue, kutsudes dubleeritud protsessi. Uus protsess on lapseprotsess ja eelmist nimetatakse vanemaprotsessiks.

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.c

Kui 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.

Parimad Linuxi mängukonsooli emulaatorid
Selles artiklis loetletakse Linuxi jaoks saadaval olev populaarne mängukonsooli emuleerimise tarkvara. Emuleerimine on tarkvara ühilduvuse kiht, mis j...
Parimad mängude jaoks mõeldud Linuxi distrod 2021. aastal
Linuxi operatsioonisüsteem on oma algsest, lihtsast, serveripõhisest välimusest kaugele jõudnud. See operatsioonisüsteem on viimastel aastatel tohutul...
Kuidas Linuxis oma mänguseanssi jäädvustada ja voogesitada
Varem peeti mängude mängimist ainult hobiks, kuid aja jooksul kasvas mängutööstus tehnoloogia ja mängijate arvu osas tohutult. Mängupublik on veebimän...