Kahvli ja täitmisega kodeerimine näites c

Coding With Fork Exec Example C



Meie artikli pealkiri sisaldab kahte erinevat C -keele funktsiooni, mis ilmnevad meie süsteemi mis tahes programmi käivitamisel. Kahjuks on null võimalust, et C -s võib korraga esineda rohkem kui üks programm. Konkreetsel ajal saab toimuda ainult üks ülesanne, mis tähendab, et see ei võimalda samaaegseid programme käitada. See paneb teid ootama ühe protsessi lõpuleviimist, et teine ​​käivitada. Selle tõrkeotsingu probleemi vältimiseks peate võib -olla oma programmi heal viisil arendama, 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 alamprotsess ja eelmist nimetatakse vanemprotsessiks.

Funktsiooni exec () kasutatakse olemasoleva programmi muutmiseks uuega. See asendamine toimub programmi või faili sisu muutmise teel. Nii et kahvli ja exec vahel on erinevus selles, et kahvel loob olemasolevast protsessist uue protsessi ja exec -i kasutatakse olemasoleva programmi asendamiseks uue loomisega.







Eeldused

Mis tahes c -programmi käivitamiseks teie Linuxi süsteemis peame sellele installima mõned eeltingimused. Minge terminali, kasutades otsetee meetodit Ctrl+Alt+T. Nüüd kirjutage man -lehtede installimiseks järgmised käsud.



$sudoasjakohanepaigaldadamanpages-dev



See installib kõik vastavad lehed.





Edasi liikudes peate programmi Linuxis käivitamiseks installima koodikompileerija. Seda kasutatakse koodi kompileerimiseks ja selle täitmiseks. Selleks paigaldame oma süsteemi GCC hoidlad.

$sudoasjakohanepaigaldadaGCC



Kodeerimine exec abil c

Kuna oleme Linuxi man -lehed installinud, kasutame täitmise kirjelduse nägemiseks järgmist käsku. Esmane proovisüntaks on järgmine:

Süntaks

Exec(tee nimi/faili, argv);

Siin oleme kasutanud päist unistd.h, kuna see sisaldab kogu teavet täitmisfunktsiooni perekondade kohta.

$mees täideviija

Nüüd saate ülaltoodud pildil jälgida täitmisviise. Need on täitmisfunktsioonide perekond. Igaüks neist on sama funktsiooni alusel erineva funktsiooni jaoks, exec.

Näide: Nüüd edasi liikudes kirjeldame näite abil exec funktsionaalsust. Selle toimimise demonstreerimiseks võtame ühe exec -funktsiooni, milleks on execv. Esiteks loome kaks faili laiendiga .c. Pärast nende loomist kirjutame neisse vastavad koodid ja käivitame need tulemuse nägemiseks.

Kaaluge failinime sample4.c. Avage see ja kasutage järgmist koodi. Selles koodis oleme kasutanud execv -i allpool kirjeldatud viisil.

Exec(./sample4copy, args);

Esimene osa sisaldab uut kataloogiteed ja teine ​​osa näitab argumentide massiivi parameetrina, mille oleme läbinud.

Näide4.c

Esiteks oleme prindinud praeguse protsessi ID. Teiseks oleme loonud märkide massiivi, mille lõpetamiseks on NULL. Kolmandaks oleme kutsunud funktsiooni sample4copy.

Proovi4copy.c

Kui kutsume täitmisfunktsiooni (), muutub protsessipilt. Allpool viidatud pilt näitab näidise4copy koodi. C.

Siin oleme praeguse protsessi ID saamiseks kasutanud ainult printimisavaldusi.

Vastavate koodide väljundit saab saada järgmiste käskude abil.

$ GCC - o proov4 proov4.c
$ GCC –o sample4copy sample4copy.c
$./näidis4

Nagu me varem kirjeldasime, kasutatakse koodi koostamiseks GCC sõna ja pärast kompileerimist täidetakse kood edukalt.

Pildi kohaselt kuvatakse kõigepealt faili sample4.c PID, nagu see oli deklareeritud enne täitmiskutset. Seejärel pärast funktsiooni exec () käivitamist käivitatakse faili sample4copy.c mõlemad printimislaused, kus protsessi id saamiseks kasutatakse getpid ().

Kahvliga kodeerimine c

Funktsioon kahvel () loob vanemprotsessist alamprotsessi. See sisaldab ka kahte päist, sealhulgas kahvli teavet.

Süntaks:

Pid_t kahvel(tühine);

Kasutamiseks saame kasutada man -lehte

$meeskahvel

Näide: Nüüd kaaluge näidet, luues faili sample3.c. Sisestame koodi faili. Koodi järgi oleme kahvli olekuks määranud kahvlihoidja.

Näide3.c

Tingimuse rakendamiseks oleme kasutanud lauset if-else. Siin on deklareeritud lihtsad printimiskäsklused, mis aitavad mõista kahvli () mõistet. Kahvel deklareeritakse esmalt väärtuseks 0 ja seejärel -1. Kahvel () on nüüd kaks protsessi, mis töötavad samaaegselt. Väljundi saab saada sama koodi abil, mida kasutati ülal näites exec.

$ GCC –proov3.c
$./näidis3

Väljund näitab, et alamprotsess käivitatakse varem kui vanem, kui vanemprotsess ootas. Ootamisfunktsioon tähendab, et see paneb vanemfunktsiooni ootama, kui ükski alamprotsessidest pole lõpetatud.

Kahvli- ja käivitamissüsteem kutsub kollektiivselt

Siin võtame kaks faili nimega sample1.c ja sample2.c. Esmalt avage fail sampl1.c ja kirjutage kood, mis on pildile alla lisatud. Oleme siin kasutanud kahvli () süsteemikutset; alamprotsessi loomisel omistatakse p väärtusele 0. Exec süsteemi kutsumise ajal asendatakse sample1.c näitega2.c.

Näide1.c

Näide2.c

Sarnaselt eespool käsitletud näidetele sisaldab ka fail sample2 selles printf avaldusi. Näites 1.c käivitatakse kõigepealt esimene printimiskäsk, seejärel kutsutakse üles kahvli funktsioon, kui p == 0, seejärel täidetakse alamosa ja käivitatakse fail sample2.c. Väljund sisaldab mõlema faili kompileerimiseks GCC -d. Siin on vanema sample1.c id ja sample2.c id erinevad, kuna nad on vanem ja laps.

Järeldus

Selles artiklis oleme kasutanud nii kahvlit kui ka käivitamist eraldi ja ühiselt, et hõlpsasti mõista kasutamist ja kontseptsiooni. Loodan, et see õpetus sisaldab piisavalt sisu, mis võimaldab juurdepääsu teie teadmiste laiendamisele.