Kodēšana ar dakšiņu un izpildi ar piemēru c

Coding With Fork Exec Example C



Mūsu raksta nosaukumā ir divas dažādas C valodas funkcijas, kas rodas, palaižot jebkuru mūsu sistēmas programmu. Diemžēl nav nulles iespēju vienlaikus C programmā parādīties vairāk nekā vienai programmai. Noteiktā laikā var notikt tikai viens uzdevums, kas nozīmē, ka tas neļauj darboties vienlaicīgām programmām. Tas liek gaidīt viena procesa pabeigšanu, lai izpildītu otru. Lai izvairītos no šīs problēmu novēršanas problēmas, iespējams, jums būs jāizstrādā sava programma labā veidā, būdama laba izstrādātāja. Linux dakša () tiek izmantota, lai pārvarētu gaidīšanu un atļautu vienlaicīgumu jūsu sistēmā. Tas palīdz dublēt jaunu procesu un izveido jaunu, izsaucot dublēto procesu. Jaunais process ir bērna process, un iepriekšējo sauc par vecāku procesu.

Tā kā funkcija exec () tiek izmantota, lai mainītu pašreizējo esošo programmu ar jaunu. Šo nomaiņu veic, veicot izmaiņas programmas vai faila saturā. Tātad atšķirība starp dakšu un izpildi ir tāda, ka dakša no esošā procesa izveido jaunu procesu, un izpildi izmanto, lai aizstātu esošo programmu, izveidojot jaunu.







Priekšnosacījumi

Lai jūsu Linux sistēmā izpildītu jebkuru c programmu, mums tajā jāinstalē daži priekšnoteikumi. Dodieties uz termināli, izmantojot īsinājumtaustiņu Ctrl+Alt+T. Tagad uzrakstiet šādas komandas, lai instalētu manu lapas.



$sudotrāpīgsuzstādītmanpages-dev



Tas instalēs visas atbilstošās lapas.





Virzoties uz priekšu, lai palaistu programmu Linux, jums jāinstalē koda kompilators. To izmanto, lai apkopotu kodu un izpildītu to. Šim nolūkam mēs savā sistēmā instalēsim GCC krātuves.

$sudotrāpīgsuzstādītGCC



Kodēšana ar exec c

Tā kā esam instalējuši manu lapas Linux, mēs izmantosim šādu komandu, lai redzētu aprakstu par izpildi. Galvenā parauga sintakse ir šāda:

Sintakse

Izpildīt(ceļa vārds/failu, argv);

Šeit mēs esam izmantojuši galveni unistd.h, jo tajā ir visa informācija par izpildes funkciju ģimenēm.

$cilvēks izpildītājs

Tagad iepriekš minētajā attēlā varat novērot izpildes veidus. Šī ir izpildfunkciju saime. Katrs no tiem ir paredzēts citai funkcijai, ievērojot to pašu bāzi, izpild.

Piemērs: Tagad, pārejot tālāk, mēs ar piemēra palīdzību aprakstīsim exec funkcionalitāti. Mēs izmantosim vienu exec funkciju, lai parādītu savu darbību, kas ir execv. Pirmkārt, mēs izveidosim divus failus ar paplašinājumu .c. Pēc to izveides mēs ierakstīsim tajos atbilstošos kodus un izpildīsim tos, lai redzētu rezultātu.

Apsveriet faila nosaukumu sample4.c. Lūdzu, atveriet to un izmantojiet šādu kodu. Šajā kodā mēs esam izmantojuši execv noteiktā veidā, kas minēts zemāk.

Izpild(./sample4copy, args);

Pirmā daļa satur jauno direktoriju ceļu, bet otrā daļa parāda argumentu masīvu kā parametru, kuru esam nokārtojuši.

4. paraugs

Pirmkārt, mēs esam izdrukājuši pašreizējā procesa ID. Otrkārt, mēs esam izveidojuši rakstzīmju masīvu, kura beigās ir NULL. Treškārt, mēs esam izsaukuši funkciju sample4copy.

Paraugs4kopija.c

Izsaucot izpildes funkciju (), tiek mainīts procesa attēls. Zemāk minētajā attēlā redzams parauga4copy kods. C.

Šeit mēs esam izmantojuši tikai drukātus paziņojumus, lai iegūtu pašreizējā procesa ID.

Attiecīgo kodu izvadi var iegūt, izmantojot šādas komandas.

$ GCC - o paraugs4 paraugs4.c
$ GCC - paraugs4kopija paraugs4kopija.c
$./paraugs4

Kā jau iepriekš aprakstījām, koda apkopošanai tiek izmantots GCC vārds, un pēc apkopošanas kods tiek izpildīts veiksmīgi.

Saskaņā ar attēlu vispirms tiek parādīts faila sample4.c PID, kāds tas tika deklarēts pirms izpildes izsaukuma. Pēc tam, kad ir izsaukta funkcija exec (), tiek izpildīti gan faila sample4copy.c drukātie paziņojumi, kur getpid () tiek izmantots, lai iegūtu procesa ID.

Kodēšana ar dakšiņu c

Funkcija dakša () izveido bērna procesu no vecāku procesa. Tajā ir arī divas galvenes, ieskaitot dakšas informāciju.

Sintakse:

Pid_t dakša(spēkā neesošs);

Mēs varam izmantot rokasgrāmatu, lai saņemtu palīdzību lietošanā

$cilvēksdakša

Piemērs: Tagad apsveriet piemēru, izveidojot failu sample3.c. Mēs ievadīsim kodu faila iekšpusē. Saskaņā ar kodu mēs esam uzstādījuši dakšas statusu kā dakšas.

3. paraugs

Nosacījuma piemērošanai esam izmantojuši paziņojumu, ja citādi. Šeit ir norādītas vienkāršas drukāšanas komandas, lai palīdzētu saprast dakšas () jēdzienu. Forkrank vispirms tiek deklarēts kā 0 un pēc tam -1. Ar dakšiņu () tagad ir divi procesi, kas darbojas vienlaikus. Izvadi var iegūt, izmantojot to pašu kodu, kas iepriekš tika izmantots izpildes piemērā.

$ GCC - paraugs3.c
$./paraugs3

Rezultāts parāda, ka pakārtotais process tiek izpildīts agrāk nekā vecāks, kad vecāku process gaidīja. Gaidīšanas funkcija nozīmē, ka tā liek vecāku funkcijai gaidīt, ja vien netiek pārtraukts kāds no visiem pakārtotajiem procesiem.

Fork and Exec sistēma zvana kolektīvi

Šeit mēs ņemsim divus failus ar nosaukumu sample1.c un sample2.c. Vispirms atveriet failu paraugs1.c un ierakstiet kodu, kas pievienots attēlā zemāk. Mēs esam izmantojuši fork () sistēmas zvanu šeit; kad tiek izveidots pakārtots process, p tiks piešķirts ar 0. Lietojot exec system-call, paraugs1.c tiks aizstāts ar paraugu2.c.

1. paraugs

2. paraugs

Līdzīgi kā iepriekš aprakstītajos piemēros, parauga2 failā būs printf paziņojumi. Paraugā 1.c vispirms tiek izpildīta pirmā drukāšanas komanda, pēc tam tiek izsaukta dakšas funkcija, kad p == 0, tad tiek izpildīta pakārtotā daļa un tiks palaists paraugs2.c. Izejā būs GCC, lai apkopotu abus failus. Šeit vecāku parauga1.c id un parauga2.c id atšķiras, jo tie ir vecāki un bērni.

Secinājums

Šajā rakstā mēs esam izmantojuši gan dakšiņu, gan izpildi atsevišķi un kopā, lai viegli izprastu lietojumu un jēdzienu. Es ceru, ka šajā apmācībā ir pietiekami daudz satura, kas ļaus piekļūt jūsu zināšanu paplašināšanai.