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