Nā Pūnaehana Hana: ʻEkolu Māmā Māmā. Mahele 3: API kaʻina hana (unuhi)

Hoʻolauna i nā ʻōnaehana hana

E Habr! Makemake wau e lawe i kou manaʻo i kahi ʻatikala-unuhi o kahi palapala hoihoi i koʻu manaʻo - OSTEP. Kūkākūkā hohonu kēia mea i ka hana o nā ʻōnaehana hana unix-like, ʻo ia hoʻi, ka hana me nā kaʻina hana, nā mea hoʻonohonoho like ʻole, ka hoʻomanaʻo, a me nā mea like ʻē aʻe i kūkulu i kahi OS hou. Hiki iā ʻoe ke ʻike i ke kumu o nā mea a pau ma aneʻi maanei. E ʻoluʻolu e hoʻomaopopo ʻoe ua hana ʻia ka unuhi me ka ʻole o ka ʻoihana (me ke kūʻokoʻa), akā ke manaʻo nei au ua paʻa ka manaʻo nui.

Hiki ke loaʻa ka hana lab ma kēia kumuhana ma aneʻi:

Nā ʻāpana ʻē aʻe:

Hiki iā ʻoe ke nānā i kaʻu channel ma telegram =)

Alarm! Aia kahi lab no kēia haʻiʻōlelo! Nānā github

API hana

E nānā i kahi laʻana o ka hana ʻana i kahi kaʻina hana ma kahi ʻōnaehana UNIX. Loaʻa ia ma o nā kelepona ʻōnaehana ʻelua keola () и exec().

Kāhea lāʻau ()

Nā Pūnaehana Hana: ʻEkolu Māmā Māmā. Mahele 3: API kaʻina hana (unuhi)

E noʻonoʻo i kahi papahana e hana i kahi kelepona () kelepona. Penei ka hopena o kona hooko ana.

Nā Pūnaehana Hana: ʻEkolu Māmā Māmā. Mahele 3: API kaʻina hana (unuhi)

ʻO ka mea mua, komo mākou i ka hana nui () a paʻi i ke kaula i ka pale. Aia ka laina i ka ʻike kaʻina hana i kapa ʻia ma ka ʻōlelo kumu PID a i ʻole ka ʻike hana. Hoʻohana ʻia kēia mea ʻike ma UNIX e kuhikuhi i kahi kaʻina hana. E kāhea ke kauoha aʻe i ka fork(). I kēia manawa, hana ʻia kahi kope pololei o ke kaʻina hana. No ka OS, ʻike ʻia aia he 2 kope o ka papahana like e holo ana ma ka ʻōnaehana, a laila e haʻalele i ka hana fork(). ʻAʻole e hoʻokō hou ʻia ke kaʻina hana keiki hou (e pili ana i ke kaʻina hana makua i hana ai), e hoʻomaka ana mai ka hana nui (). Pono e hoʻomanaʻo ʻia ʻaʻole he kope pololei ke kaʻina hana keiki o ke kaʻina hana makua; ʻo ia hoʻi, aia kona wahi kikoʻī ponoʻī, kāna mau papa inoa ponoʻī, kāna kuhikuhi ponoʻī i nā kuhikuhi hiki ke hoʻokō, a me nā mea like. No laila, ʻokoʻa ka waiwai i hoʻihoʻi ʻia i ka mea kāhea o ka hana fork(). Ma keʻano kūikawā, e loaʻa i ke kaʻina hana makua ka waiwai PID o ke kaʻina hana keiki ma ke ʻano he hoʻihoʻi, a e loaʻa i ke keiki ka waiwai like me 0. Me ka hoʻohana ʻana i kēia mau code hoʻihoʻi, hiki iā ʻoe ke hoʻokaʻawale i nā kaʻina hana a koi i kēlā me kēia o lākou e hana i kāna hana ponoʻī. . Eia naʻe, ʻaʻole i wehewehe pono ʻia ka hoʻokō ʻana o kēia papahana. Ma hope o ka māhele ʻana i nā kaʻina hana 2, hoʻomaka ka OS e nānā iā lākou, a me ka hoʻolālā ʻana i kā lākou hana. Inā hoʻokō ʻia ma kahi kaʻina hana hoʻokahi, ʻo kekahi o nā kaʻina hana, i kēia hihia ka makua, e hoʻomau i ka hana, a laila e loaʻa ka mana o ke keiki. Ke hoʻomaka hou, ʻokoʻa paha ke kūlana.

Kāhea kali ()

Nā Pūnaehana Hana: ʻEkolu Māmā Māmā. Mahele 3: API kaʻina hana (unuhi)

E noʻonoʻo i ka papahana aʻe. Ma kēia papahana, ma muli o ke kū ʻana o kahi kelepona kali () E kali mau ana ke kaʻina hana makua no ka pau ʻana o ke kaʻina hana o ke keiki. I kēia hihia, e loaʻa iā mākou kahi huaʻōlelo i wehewehe ʻia ma ka pale

Nā Pūnaehana Hana: ʻEkolu Māmā Māmā. Mahele 3: API kaʻina hana (unuhi)

exec() kelepona

Nā Pūnaehana Hana: ʻEkolu Māmā Māmā. Mahele 3: API kaʻina hana (unuhi)

E noʻonoʻo i ka pilikia exec(). Pono kēia kelepona ʻōnaehana inā makemake mākou e holo i kahi papahana ʻokoʻa loa. Maanei mākou e kāhea ai execvp() e holo i ka polokalamu wc he polokalamu helu huaolelo. He aha ka hana ke kāhea ʻia ka exec()? Hāʻawi ʻia kēia kelepona i ka inoa o ka faila hoʻokō a me kekahi mau ʻāpana e like me nā hoʻopaʻapaʻa. Ma hope o ka hoʻouka ʻia ʻana o ka code a me ka ʻikepili static mai kēia faila hiki ke hoʻokō ʻia a kākau ʻia kāna ʻāpana ponoʻī me ke code. Hoʻomaka hou ʻia nā wahi hoʻomanaʻo i koe, e like me ka puʻu a me ka puʻu. Ma hope o ka hoʻokō ʻana o ka OS i ka papahana, e hāʻawi ana i kahi hoʻopaʻapaʻa. No laila ʻaʻole mākou i hana i kahi kaʻina hana hou, ua hoʻololi wale mākou i ka polokalamu e holo nei i kēia manawa i kahi papahana holo ʻē aʻe. Ma hope o ka hoʻokō ʻana i ka exec () kelepona i ka mamo, ʻike ʻia me he mea lā ʻaʻole holo ka papahana kumu.

He mea maʻamau kēia hoʻopiʻi hoʻomaka no kahi pūpū Unix, a hiki i kēlā pūpū ke hoʻokō i ke code ma hope o ke kāhea ʻana keola (), akā ma mua o ke kāhea ʻana exec(). ʻO kahi laʻana o ia code ʻo ia ka hoʻoponopono ʻana i ke kaiapuni shell i nā pono o ka papahana e hoʻomaka ʻia ana, ma mua o ka hoʻomaka ʻana.

Shell - he polokalamu hoʻohana wale nō. Hōʻike ʻo ia iā ʻoe i ka laina kono a kali iā ʻoe e kākau i kekahi mea i loko. I ka hapanui o nā hihia, inā kākau ʻoe i ka inoa o kahi papahana ma laila, e ʻike ka pūpū i kona wahi, e kāhea i ke ala fork(), a laila e kāhea i kekahi ʻano exec() e hana i kahi kaʻina hana hou a kali a hoʻopau ʻia me ka hoʻohana ʻana i kahi. kali () kelepona. Ke puka ke kaʻina hana o ke keiki, e hoʻi ka pūpū mai ka kali () kelepona a paʻi hou i ka wikiwiki a kali i ke kauoha aʻe e hoʻokomo ʻia.

ʻO ka fork() & exec() split hiki i ka pūpū ke hana i kēia mau mea, no ka laʻana:
wc faile > new_file.

Ma kēia hiʻohiʻona, hoʻihoʻi ʻia ka hopena o ka polokalamu wc i kahi faila. He mea maʻalahi loa ka hana ʻana o ka pūpū - ma ka hana ʻana i kahi kaʻina keiki ma mua o ke kelepona ʻana exec(), pani ka pūpū i ka puka maʻamau a wehe i ka faila waihona_hou, no laila, nā huahana a pau mai ka papahana holo hou aku wc e hoʻihoʻi ʻia i kahi faila ma kahi o kahi pale.

Paipu Unix hoʻokō ʻia ma ke ʻano like, me ka ʻokoʻa e hoʻohana ai lākou i kahi paipu () kelepona. I kēia hihia, e hoʻopili ʻia ke kahawai puka o ke kaʻina hana i kahi pila paipu i loaʻa i loko o ka kernel, kahi e hoʻopili ʻia ai ke kahawai hoʻokomo o kahi kaʻina hana ʻē aʻe.

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka