Pūnaha Whakahaere: E toru nga waahanga ngawari. Wāhanga 3: API Tukatuka (whakamaori)

He Kupu Whakataki ki nga Pūnaha Whakahaere

Hei Habr! E hiahia ana ahau ki te kawe mai ki a koe he raupapa tuhinga-whakamaoritanga o tetahi tuhinga whakamere ki taku whakaaro - OSTEP. Ka tino matapakihia e tenei rauemi nga mahi o nga punaha whakahaere rite-unix, ara, te mahi me nga tikanga, nga momo kaihōtaka, mahara, me etahi atu waahanga rite e hanga ana i te OS hou. Ka taea e koe te kite i te taketake o nga rawa katoa i konei konei. Kia mahara ko te whakamaoritanga he mea kore noa (he tino kore noa), engari ko taku tumanako ka mau tonu te tikanga whanui.

Ko nga mahi taiwhanga mo tenei kaupapa ka kitea i konei:

Ko etahi atu waahanga:

Ka taea hoki e koe te tirotiro i taku hongere i waea waea =)

Whakaoho! He taiwhanga mo tenei kauhau! Titiro github

API Tukatuka

Kia titiro tatou ki tetahi tauira o te hanga i tetahi tukanga i roto i te punaha UNIX. Ka puta ma nga waea punaha e rua marau () и kaiwhakahaere().

Karanga marau()

Pūnaha Whakahaere: E toru nga waahanga ngawari. Wāhanga 3: API Tukatuka (whakamaori)

Whakaarohia he kaupapa e hanga ana i te marau() waea. Ko te hua o tana mahi ka penei.

Pūnaha Whakahaere: E toru nga waahanga ngawari. Wāhanga 3: API Tukatuka (whakamaori)

Tuatahi, ka uru tatou ki te mahi matua() ka taia te aho ki te mata. Kei roto i te raina te kaitautuhi tukanga e kiia ana i te taketake PID te kaitautuhi tukanga ranei. Ka whakamahia tenei tohu i roto i te UNIX hei tohu ki tetahi tukanga. Ko te whakahau e whai ake nei ka karanga marau(). I tenei wa, ka hangaia he kape tata tonu o te tukanga. Mo te OS, te ahua nei e 2 nga kape o te kaupapa kotahi e whakahaere ana i runga i te punaha, ka puta ke te mahi marau(). Ko te tukanga tamaiti hou i hanga (e pa ana ki te tukanga matua nana i hanga) ka kore e mahia, timata mai i te mahi matua(). Kia maumahara ko te tukanga tamaiti ehara i te kape tika o te tukanga matua, inaa, he waahi noho, he rehita, he tohu tohu ki nga tohutohu ka taea te whakahaere, me era atu mea. No reira, ka rereke te uara i whakahokia ki te kaiwaea o te mahi marau(). Ina koa, ka whiwhi te tukanga matua i te uara PID o te tukanga tamaiti hei whakahoki, ka whiwhi te tamaiti i te uara e rite ana ki te 0. Ma te whakamahi i enei waehere whakahoki, ka taea e koe te wehe i nga tukanga me te akiaki ia ratou ki te mahi i ana ake mahi. . Heoi, kaore i te tino whakamaaramatia te whakatinanatanga o tenei kaupapa. I muri i te wehewehe ki nga tukanga e 2, ka timata te OS ki te aroturuki i a raatau, me te whakamahere i a raatau mahi. Mena ka mahia i runga i te tukatuka kotahi-matua, ko tetahi o nga tukanga, i tenei keehi, ko te matua, ka mahi tonu, katahi ka whiwhi mana whakahaere te tamaiti. Ina timata ano, ka rereke pea te ahuatanga.

Waea tatari()

Pūnaha Whakahaere: E toru nga waahanga ngawari. Wāhanga 3: API Tukatuka (whakamaori)

A hi‘o na i te porotarama i muri nei. I roto i tenei kaupapa, na te aroaro o te waea tatari () Ka tatari tonu te tukanga matua kia oti te mahi a te tamaiti. I roto i tenei take, ka whiwhi tatou i te putanga kuputuhi tino tautuhi i runga i te mata

Pūnaha Whakahaere: E toru nga waahanga ngawari. Wāhanga 3: API Tukatuka (whakamaori)

exec() karanga

Pūnaha Whakahaere: E toru nga waahanga ngawari. Wāhanga 3: API Tukatuka (whakamaori)

Whakaarohia te wero kaiwhakahaere(). Ka whai hua tenei waea punaha ina hiahia tatou ki te whakahaere i tetahi kaupapa rereke. I konei ka karanga tatou execvp() ki te whakahaere i te kaupapa wc he kaupapa tatau kupu. Ka aha ina karangahia te exec()? Ka tukuna tenei waea ki te ingoa o te konae kawe me etahi tawhā hei tohenga. Whai muri ka utaina te waehere me nga raraunga pateko mai i tenei konae ka taea te kawe, ka tuhiruatia tana ake waahanga me te waehere. Ko nga waahi mahara e toe ana, penei i te puranga me te puranga, ka arataki ano. Whai muri ka mahia noa e te OS te kaupapa, ka tukuna he huinga tautohetohe. No reira kaore matou i hanga i tetahi mahi hou, i huri noa i te kaupapa e whakahaere ana i tenei wa ki tetahi atu kaupapa whakahaere. Whai muri i te whakahaere i te piiraa exec() i roto i te uri, ka puta te ahua karekau te kaupapa taketake i rere.

Ko tenei raruraru whakaoho he tino noa mo te anga Unix, a ka taea e taua anga te mahi waehere i muri i te waea marau (), engari i mua i te piiraa kaiwhakahaere(). Ko tetahi tauira o taua waehere ko te whakatikatika i te taiao anga ki nga hiahia o te kaupapa e whakarewahia ana, i mua i te whakarewatanga.

anga - he kaupapa kaiwhakamahi noa. Ka whakaatu ia ki a koe te rarangi powhiri me te tatari kia tuhia e koe tetahi mea ki roto. I te nuinga o nga wa, mena ka tuhia e koe te ingoa o tetahi papatono ki reira, ka kitea e te anga tona waahi, ka karangahia te tikanga marau(), ka karanga i etahi momo exec() ki te hanga i tetahi mahi hou ka tatari kia oti ma te whakamahi i te tatari() karanga. Ka puta te tukanga o te tamaiti, ka hoki mai te anga mai i te waea tatari() ka ta ano i te tohutoro ka tatari kia whakauruhia te whakahau e whai ake nei.

Ko te wehenga marau() & exec() ka taea e te anga te mahi i nga mea e whai ake nei, hei tauira:
wc kōnae > new_file.

I tenei tauira, ka tukuna te putanga o te kaupapa wc ki tetahi konae. He maamaa noa te huarahi e tutuki ai te anga - ma te hanga i te tukanga tamaiti i mua i te waea kaiwhakahaere(), ka kati te anga i te putanga paerewa me te whakatuwhera i te konae kōnae_hou, na, ko nga putanga katoa mai i te kaupapa whakahaere atu wc ka tukuna ki tetahi konae hei utu mo te mata.

Unix paipa he rite tonu te whakatinanatanga, me te rerekee ka whakamahia e ratou he paipa() waea. I roto i tenei take, ka honohia te awa whakaputa o te tukanga ki te rarangi paipa kei roto i te kernel, ka hono atu te awa whakauru o tetahi atu tukanga.

Source: will.com

Tāpiri i te kōrero