Ang pag-coding sa fork at exec sa pamamagitan ng halimbawa sa c

Coding With Fork Exec Example C



Ang pamagat ng aming artikulo ay naglalaman ng dalawang magkakaibang pag-andar ng wikang C na nangyayari habang nagpapatakbo ng anumang programa sa aming system. Sa kasamaang palad, mayroong zero posibilidad na maganap ng higit sa isang programa nang paisa-isa sa C. Isang solong gawain lamang ang maaaring mangyari sa isang partikular na oras, na nangangahulugang hindi nito pinapayagan na tumakbo ang mga kasabay na programa. Sanhi ka nitong maghintay para sa pagkumpleto ng isang proseso upang maipatupad ang isa pa. Upang maiwasan ang problemang ito sa pagto-troubleshoot, maaaring kailanganin mong paunlarin ang iyong programa sa isang mabuting paraan, na maging isang mahusay na developer. Ginagamit ang Linux fork () upang mapagtagumpayan ang paghihintay at payagan ang pagsabay sa iyong system. Nakakatulong ito sa pagdoble ng isang bagong proseso at lumilikha ng bago sa pamamagitan ng pagtawag sa dobleng proseso. Ang bagong proseso ay ang proseso ng bata, at ang dating proseso ay tinatawag na proseso ng magulang.

Samakatuwid, ang function ng exec () ay ginagamit upang baguhin ang kasalukuyang umiiral na programa sa bago. Ang kapalit na ito ay ginagawa sa pamamagitan ng paggawa ng mga susog sa nilalaman ng isang programa o isang file. Kaya ang hindi pagkakapareho sa pagitan ng tinidor at exec ay ang tinidor na lumilikha ng isang bagong proseso mula sa umiiral na proseso, at ginagamit ang exec upang palitan ang mayroon nang programa sa pamamagitan ng paglikha ng bago.







Mga Pangangailangan

Upang maipatupad ang anumang c programa sa iyong Linux system, kailangan naming mag-install ng ilang mga kinakailangan sa ito. Pumunta sa terminal sa pamamagitan ng paggamit ng paraan ng shortcut na Ctrl + Alt + T. Ngayon isulat ang mga sumusunod na utos upang mai-install ang mga pahina ng tao.



$sudoapti-installmanpages-dev



I-install nito ang lahat ng mga kaukulang pahina.





Sumusulong, upang magpatakbo ng isang programa sa Linux, kailangan mong mag-install ng isang tagatala ng code. Ginagamit iyon upang maiipon ang code at maipatupad ito. Para sa hangaring ito, mai-install namin ang mga repository ng GCC sa aming system.

$sudoapti-installGCC



Coding na may exec sa c

Tulad ng pag-install namin ng mga pahina ng tao sa Linux, gagamitin namin ang sumusunod na utos upang makita ang paglalarawan tungkol sa exec. Ang pangunahing sample na syntax ay ang sumusunod:

Syntax

Exec(pathname/file, argv);

Ginamit namin dito ang unistd.h header dahil naglalaman ito ng lahat ng impormasyon ng mga pamilya ng pagpapaandar ng exec.

$lalaki exec

Ngayon sa nabanggit na imahe sa itaas, maaari mong obserbahan ang mga uri ng exec. Ito ang pamilya ng mga pagpapaandar ng exec. Ang bawat isa ay para sa isang iba't ibang mga function ng pagsunod sa parehong base, exec.

Halimbawa: Ngayon, paglipat ng karagdagang, ilalarawan namin ang pag-andar ng exec sa tulong ng isang halimbawa. Gagawa kami ng isang pagpapaandar ng exec upang maipakita ang pagtatrabaho nito, na kung saan ay execv. Una, lilikha kami ng dalawang mga file na may extension ng .c. Matapos ang kanilang paglikha, magsusulat kami ng kani-kanilang mga code sa kanila at isasagawa ang mga ito upang makita ang resulta.

Isaalang-alang ang isang file name sample4.c. Mangyaring buksan ito at gamitin ang sumusunod na code. Sa code na ito, gumamit kami ng execv sa isang partikular na paraang binanggit sa ibaba.

Execv(./sample4copy, args);

Naglalaman ang unang bahagi ng bagong path ng direktoryo, at ipinapakita ng pangalawang bahagi ang array ng mga argumento bilang isang parameter na naipasa namin.

Sample4.c

Una sa lahat, nakalimbag kami ng id ng kasalukuyang proseso. Pangalawa, lumikha kami ng isang character array na may Null sa huli para sa pagwawakas. Pangatlo tinawag namin ang sample4copy function.

Sample4copy.c

Kapag tinawag namin ang exec function (), ang proseso ng imahe ay nabago. Sa ibaba ang nabanggit na imahe sa ibaba ay nagpapakita ng code ng sample4copy.c.

Dito lamang namin ginamit ang mga pahayag sa pag-print upang makuha ang id ng kasalukuyang proseso.

Ang output ng kani-kanilang mga code ay maaaring makuha sa pamamagitan ng paggamit ng mga sumusunod na utos.

$ GCC – o sample4 sample4.c
$ GCC –o sample4copy sample4copy.c
$./sample4

Tulad ng inilarawan namin nang mas maaga, ang salitang GCC ay ginagamit upang maipon ang code, at pagkatapos ng pag-ipon, matagumpay na naisakatuparan ang code.

Ayon sa imahe, ang PID ng sample4.c file ay ipinapakita muna nang idineklara bago ang tawag sa exec. Pagkatapos pagkatapos tawagin ang pagpapaandar ng exec (), kapwa ang mga print statement ng file sample4copy.c ay naisagawa kung saan ginagamit ang getpid () upang makuha ang id ng proseso.

Coding na may isang tinidor sa c

Ang pagpapaandar ng fork () ay lumilikha ng proseso ng bata mula sa proseso ng magulang. Naglalaman din ito ng dalawang mga header, kabilang ang impormasyon ng tinidor dito.

Syntax:

Pid_t tinidor(walang bisa);

Maaari naming gamitin ang pahina ng tao para sa tulong sa paggamit

$lalakitinidor

Halimbawa: Ngayon isaalang-alang ang isang halimbawa sa pamamagitan ng paglikha ng isang file sample3.c. Ipapasok namin ang code sa loob ng file. Ayon sa code, itinakda namin ang katayuan ng tinidor bilang forkrank.

Sample3.c

Ginamit namin ang pahayag na kung-iba upang mailapat ang kundisyon. Ang mga simpleng print command ay ipinahayag dito upang makatulong sa pag-unawa sa fork () na konsepto. Ang Forkrank ay unang idineklara bilang 0 at pagkatapos ay -1. Sa isang tinidor (), mayroon na ngayong dalawang proseso na gumagana nang sabay. Ang output ay maaaring makuha sa pamamagitan ng paggamit ng parehong code, tulad ng ginamit sa itaas sa halimbawa ng exec.

$ GCC –o sample3.c
$./sample3

Ipinapakita ng output na ang proseso ng bata ay naisagawa nang mas maaga kaysa sa magulang kapag naghihintay ang proseso ng magulang. Ipinapahiwatig ng pagpapaandar ng paghihintay na sanhi ng paghihintay ng pagpapaandar ng magulang maliban kung ang isa sa lahat ng proseso ng bata ay winakasan.

Ang sistema ng Fork at Exec ay tumatawag nang sama-sama

Dito kukuha kami ng dalawang mga file na pinangalanang sample1.c at sample2.c. Una, buksan ang file sampl1.c at isulat ang code na naidugtong sa ibaba sa imahe. Ginamit namin ang fork () system-call dito; kapag ang proseso ng bata ay nilikha, ang p ay itatalaga ng 0. Habang gumagamit ng exec system-call, ang sample1.c ay papalitan ng sample2.c.

Sample1.c

Sample2.c

Katulad ng mga halimbawang tinalakay sa itaas, ang sample2 file ay maglalaman ng mga pahayag ng printf dito. Sa sample1.c, ang unang print print ay naisakatuparan muna, pagkatapos ay tinawag ang pagpapaandar ng tinidor, kapag p == 0, pagkatapos ay isinasagawa ang bahagi ng bata at tatakbo ang sample2.c file. Maglalaman ang output ng GCC upang mag-ipon ng parehong mga file. Dito ang parent sample1.c id at sample2.c id ay iba dahil sila ay magulang at anak.

Konklusyon

Sa artikulong ito, ginamit namin ang parehong tinidor at exec nang hiwalay at sama-sama upang madaling maunawaan ang paggamit at konsepto. Inaasahan kong naglalaman ang tutorial na ito ng sapat na nilalaman na hahantong sa pag-access sa pagtaas ng iyong kaalaman.