Awọn ọna ṣiṣe: Awọn nkan Rọrun mẹta. Apa 3: Ilana API (itumọ)

Ifihan si Awọn ọna ṣiṣe

Hey Habr! Emi yoo fẹ lati mu si akiyesi rẹ lẹsẹsẹ awọn nkan-awọn itumọ ti awọn iwe ti o nifẹ ninu ero mi - OSTEP. Ohun elo yii n jiroro ni jinna iṣẹ ti awọn ọna ṣiṣe bi unix, eyun, ṣiṣẹ pẹlu awọn ilana, awọn oluṣeto oriṣiriṣi, iranti, ati awọn paati ti o jọra miiran ti o jẹ OS ode oni. O le wo atilẹba ti gbogbo awọn ohun elo nibi nibi. Jọwọ ṣakiyesi pe a ṣe itumọ naa lainiṣiṣẹ (ni ọfẹ), ṣugbọn Mo nireti pe MO ni itumọ gbogbogbo mọ.

Iṣẹ lab lori koko yii le ṣee ri nibi:

Awọn ẹya miiran:

O tun le ṣayẹwo ikanni mi ni telegram =)

Itaniji! Lab wa fun iwe-ẹkọ yii! Wo github

API ilana

Jẹ ki a wo apẹẹrẹ ti ṣiṣẹda ilana kan ninu eto UNIX kan. O ṣẹlẹ nipasẹ awọn ipe eto meji orita () и exec().

Ipe orita()

Awọn ọna ṣiṣe: Awọn nkan Rọrun mẹta. Apa 3: Ilana API (itumọ)

Wo eto kan ti o ṣe ipe orita (). Abajade ti ipaniyan rẹ yoo jẹ bi atẹle.

Awọn ọna ṣiṣe: Awọn nkan Rọrun mẹta. Apa 3: Ilana API (itumọ)

Ni akọkọ, a tẹ iṣẹ akọkọ () ati tẹ okun naa si iboju. Laini naa ni idamo ilana eyiti a pe ni atilẹba ninu atilẹba PID tabi ilana idamo. A lo idamo yii ni UNIX lati tọka si ilana kan. Aṣẹ atẹle yoo pe orita (). Ni aaye yii, o fẹrẹ daakọ deede ti ilana naa ni a ṣẹda. Fun OS, o dabi pe awọn ẹda 2 ti eto kanna ti nṣiṣẹ lori eto naa, eyiti yoo jade kuro ni iṣẹ orita (). Ilana ọmọ tuntun ti a ṣẹda (ni ibatan si ilana obi ti o ṣẹda) kii yoo ṣiṣẹ mọ, bẹrẹ lati iṣẹ akọkọ (). O yẹ ki o ranti pe ilana ọmọde kii ṣe ẹda gangan ti ilana obi; ni pataki, o ni aaye adirẹsi tirẹ, awọn iforukọsilẹ tirẹ, itọka tirẹ si awọn ilana ṣiṣe, ati bii. Nitorinaa, iye ti o pada si olupe ti iṣẹ orita () yoo yatọ. Ni pato, ilana obi yoo gba iye PID ti ilana ọmọ bi ipadabọ, ati pe ọmọ naa yoo gba iye ti o dọgba si 0. Lilo awọn koodu ipadabọ wọnyi, o le lẹhinna ya awọn ilana ati fi agbara mu ọkọọkan wọn lati ṣe iṣẹ tirẹ. . Sibẹsibẹ, ipaniyan ti eto yii ko ni asọye muna. Lẹhin ti pin si awọn ilana 2, OS bẹrẹ lati ṣe atẹle wọn, ati gbero iṣẹ wọn. Ti o ba ṣiṣẹ lori ero isise-ọkan kan, ọkan ninu awọn ilana, ninu ọran yii obi yoo tẹsiwaju ṣiṣẹ, lẹhinna ilana ọmọ yoo gba iṣakoso. Nigbati o ba tun bẹrẹ, ipo naa le yatọ.

Ipe duro()

Awọn ọna ṣiṣe: Awọn nkan Rọrun mẹta. Apa 3: Ilana API (itumọ)

Gbé ìtòlẹ́sẹẹsẹ tó tẹ̀ lé e yìí yẹ̀ wò. Ninu eto yii, nitori wiwa ipe kan duro () Ilana obi yoo ma duro nigbagbogbo fun ilana ọmọ lati pari. Ni idi eyi, a yoo gba itujade ọrọ asọye ti o muna loju iboju

Awọn ọna ṣiṣe: Awọn nkan Rọrun mẹta. Apa 3: Ilana API (itumọ)

exec () ipe

Awọn ọna ṣiṣe: Awọn nkan Rọrun mẹta. Apa 3: Ilana API (itumọ)

Gbé ìpèníjà náà yẹ̀ wò exec(). Ipe eto yii wulo nigba ti a fẹ ṣiṣe eto ti o yatọ patapata. Nibi a yoo pe execvp() lati ṣiṣẹ eto wc ti o jẹ eto kika ọrọ. Kini yoo ṣẹlẹ nigbati a pe exec ()? Ipe yii ti kọja orukọ faili ti o le ṣiṣẹ ati diẹ ninu awọn paramita bi awọn ariyanjiyan. Lẹhin eyi ti koodu ati data aimi lati faili ti o le ṣiṣẹ ni a kojọpọ ati apakan tirẹ pẹlu koodu naa ti kọkọ kọ. Awọn agbegbe iranti ti o ku, gẹgẹbi akopọ ati okiti, ti tun bẹrẹ. Lẹhin eyi ni OS nìkan ṣiṣẹ eto naa, ti o kọja ni ṣeto awọn ariyanjiyan. Nitorinaa a ko ṣẹda ilana tuntun, a rọrun yipada eto ti nṣiṣẹ lọwọlọwọ sinu eto ṣiṣiṣẹ miiran. Lẹhin ṣiṣe ipe exec () ninu ọmọ, o han bi ẹnipe eto atilẹba ko ṣiṣẹ rara.

Idiju ibẹrẹ yii jẹ deede deede fun ikarahun Unix kan, ati gba laaye ikarahun yẹn lati ṣiṣẹ koodu lẹhin pipe orita (), ṣugbọn ṣaaju ipe exec(). Apeere ti iru koodu yoo jẹ atunṣe agbegbe ikarahun si awọn iwulo ti eto ti a ṣe ifilọlẹ, ṣaaju ifilọlẹ rẹ.

ikarahun - o kan olumulo eto. O fi laini ifiwepe han ọ o si duro de ọ lati kọ nkan sinu rẹ. Ni ọpọlọpọ igba, ti o ba kọ orukọ eto kan nibẹ, ikarahun naa yoo wa ipo rẹ, pe ọna orita () ati lẹhinna pe diẹ ninu awọn iru exec () lati ṣẹda ilana titun kan ki o duro fun lati pari nipa lilo a duro () ipe. Nigbati ilana ọmọ ba jade, ikarahun naa yoo pada lati ipe idaduro () ati tẹ titẹ sii lẹẹkansi ati duro fun aṣẹ atẹle lati tẹ sii.

Pipin orita () & exec () gba ikarahun laaye lati ṣe awọn nkan wọnyi, fun apẹẹrẹ:
wc faili> new_file.

Ni apẹẹrẹ yii, abajade ti eto wc ni a darí si faili kan. Ọna ti ikarahun ṣe aṣeyọri eyi jẹ ohun rọrun - nipa ṣiṣẹda ilana ọmọde ṣaaju pipe exec(), ikarahun naa tilekun iṣẹjade boṣewa ati ṣi faili naa new_faili, bayi, gbogbo awọn ti o wu lati awọn siwaju yen eto wc yoo darí si faili dipo iboju.

Unix paipu ti wa ni imuse ni ọna kanna, pẹlu iyatọ ti wọn lo ipe paipu (). Ni ọran yii, ṣiṣan iṣelọpọ ti ilana naa yoo sopọ si isinyi paipu kan ti o wa ninu ekuro, eyiti ṣiṣan titẹ sii ti ilana miiran yoo sopọ si.

orisun: www.habr.com

Fi ọrọìwòye kun