C programavimas

POSIX nerštas su C programavimu

POSIX nerštas su C programavimu
Nerštas yra funkcija, naudojama POSIX, norint įkelti ir vykdyti vaiko procesus. Tada šiuo metu vykdomas procesas POSIX sistemoje tęs arba nevykdys asinchroniškai šių antrinių procesų ir kitų procesų. Kai tik sukuriamas naujas poskyris, jam reikia tam tikros atminties, kuri leistų vykdyti tėvų ir vaikų procesą. „Microsoft Windows“, UNIX ir „Linux“ yra tam tikra ikrų šeima; ir kitos neršto funkcijų šeimos laikomos neprivalomu pratęsimu.

Kodėl verta naudoti „POSIX Spawn“?

The posix_spawn () ir posix_spawnp () funkcijos yra naudojamos kuriant naują vaiko procesą. Tada vaiko procesas vykdo failą. Šias funkcijas POSIX nurodė standartizuoti naujų procesų kūrimo metodą mašinoms, neturinčioms šakių sistemos skambučių palaikymo. Šios mašinos paprastai yra mažos ir jose trūksta įterptųjų sistemų, skirtų palaikyti lMMU.

Šios dvi funkcijos sujungia šakę ir „exec“ su keliais papildomais veiksmais, kurie atliks vaiką. Jie veikia kaip funkcijų pogrupis, paprastai pasiekiamas šakute, visiems sistemos skambučiams ir įterptosioms sistemoms, kurioms trūksta tokio funkcionalumo.

1 pavyzdys: posix_spawn ()

Šiame pavyzdyje naudosime spawn () funkciją, kad sukurtume ir įvykdytume naują vaiko procesą. Tada mes paaiškinsime visus svarbius argumentus, naudojamus funkcijoje.

Pavyzdyje naudojami šie argumentai:

Argumentas apibūdinimas
Naudojamas apibrėžti visas ikrus atliekančias operacijas.
kelias Kelio, kurį reikia vykdyti, pavadinimas.
fd_count Įrašų su masyvu fd_map skaičius. Jei fd_count yra lygus 0, fd_map nepaisoma. Tokiais atvejais vaiko procesas paveldi visus failų aprašus, nepaisydamas modifikuotų.
fd_map
Failų aprašų masyvas, kurį paveldės vaiko procesas. Jei fd_count reikšmė nėra 0, tada fd_map reikalingas, kad failo aprašai fd_count pasiektų didžiausią OPEN_MAX vertę. Tai turi:

· Vaiko proceso indėlis

· Rezultatas

· Klaidos vertės

paveldėti Struktūrinis paveldėjimas rodo, kad vartotojai nori, kad jų vaikas procesą paveldėtų iš tėvų.
argv Konkretaus argumento vektoriaus žymeklis. Argv [0] reikšmė negali būti NULL ir turi būti įkeliamas failo vardas. Argv reikšmė negali būti lygi NULL.
envp Nurodo simbolių masyvo masyvą. Kiekvienas šio masyvo žymeklis nurodo aplinkos kintamąjį. Masyvo pabaigos taškas yra NULL rodyklė.

2 pavyzdys: bandymas.c

Šiame pavyzdyje yra sukurtas naujas antrinis procesas, pagal kurį vykdoma komanda / bin / sh -c. Tai vertė, perduota kaip pirmasis argumentas. The testas.c kodas yra toks:

Ankstesniame pavyzdyje mes paskambinome į bibliotekas, tada paskambinome į neršti.h antraštė. Taip pat pamatysite posix_spawn () raginamas sukurti vaiko procesą aukščiau pateiktame pavyzdyje. The neršti ir neršti funkcijos yra naudojamos vietoje šakutė ir egzek funkcijos. Nerštas () turi lankstumą ir daugeliu atžvilgių suteikia vartotojams daug lengvumo. Tai šiek tiek skiriasi nuo sistema () ir exec (). Tai sugrįš ir sukurs naują vaiko procesą. Mūsų pavyzdyje taip yra pid. Aukščiau galite pamatyti laukimo funkciją waitpid (), tada sistema () yra naudojamas. Atkreipkite dėmesį, kad neršti () ir šakutė () skambinimo procesai yra vienodi, o abiejų funkcijų įgyvendinimo būdas yra daugmaž vienodas.

Dabar vykdysime pavyzdį naudodami a gcc sudarytojas. Taip pat galite naudoti bet kurį kitą pasirinktą kompiliatorių:

$ sudo gcc testas.c -lrt

Tada paleiskite šiuos veiksmus:

$ ./ a.išėjo

Minėtos komandos išvestis atrodys taip:

Vaikas pid bus sukurta, kaip matote aukščiau pateiktame išvestyje.

Biblioteka

Libc: Norėdami susieti, naudokite -lc gcc sudarytojas. Čia atkreipkite dėmesį, kad ši biblioteka įtraukiama automatiškai.

Nerštas ()

The neršti () funkcija pagrįsta POSIX 1003.1-asis standarto projektas naudojamas kaip posix_spawn (). C bibliotekoje yra neršto * () funkcijos. Čia pateiksime keletą priesagų ir jų aprašymus:

e: naudojamas kaip aplinkos kintamųjų masyvas.

l: naudojamas kaip NULL baigtas programos viduje naudojamų argumentų sąrašas.

p: naudojamas apibrėžti santykinį kelią. Jei kelio reikšmė nėra pasvirojo brėžinio, sistema naudoja ir ieško PATH aplinkos kintamojo bet kuriai panašiai programai.

v: veikia kaip argumentų vektorius programos viduje.

Failų aprašų susiejimas

Į neršti (), mes praktikuojame fd_count ir fd_map argumentai iškviesti bylos aprašus. Jame nurodoma, kurį vaiką paveldėti.

Skaičius, naudojamas kaip failo aprašas vaiko procesui, priklauso nuo jo vietos fd_map. Čia apsvarstysime tėvų pavyzdį su failų aprašais, kurių vertė yra 1, 3 ir 5, tada susiejimas bus maždaug toks:

>> int fd_map = 1, 3, 5;
Vaikui Tėvui
0 1
1 3
2 5

Atminkite, kad jei naudojate aiškųjį fd_map Norėdami suderinti šiuos failų aprašus su vaiku ir tėvais, turite susieti SPWAN_FDCLOSE funkcija tęsti.

Paveldėjimo vėliavos

„Spawn“ vartotojai paveldėjimo atveju turi iškviesti bet kurią iš šių vėliavų. Keletas „Spawn“ vėliavų pavyzdžių ir jų aprašymai pateikti žemiau:

Vėliava apibūdinimas
SPAWN_ALIGN_DEFAULT Ši žyma naudojama norint nustatyti numatytuosius derinimo nustatymus.
SPAWN_ALIGN_FAULT Ši žyma naudojama neteisingam duomenų nuorodų suderinimui.
SPAWN_ALIGN_NOFAULT Ši žyma naudojama gedimo nesutapimui ištaisyti.
SPAWN_DEBUG Ši vėliava naudojama derinant branduolį.
SPAWN_EXEC SPAWN veikia kaip „exec *“ () naudodamas šią vėliavą.
SPAWN_EXPLICIT_CPU Ši žyma naudojama norint nustatyti bėgimo kaukę ir paveldėti kaukės = paleisti kaukės narį.
SPAWN_EXPLICIT_SCHED Ši žyma naudojama planavimo politikai nustatyti.

The <neršti.h> apibrėžia tą kaukę SPAWN_ALIGN_MASK naudojami aukščiau išvardytoms vėliavoms sulyginti.

pid_t pgroup Vaiko proceso grupė, jei vėliavos naryje nurodote SPAWN_SETGROUP.
int runmask Vaiko kaukė paveldi kaukes, dėl kurių susitarta pagal šio nario vertę.
sigset_t sigmask Signalo kaukė vaiko procesui, naudojama nurodyti vėliavos narių būseną.
sigset_t sigdefault Numatytų signalų vaiko procesų rinkinys.

Klaidos

The posix_spawn () ir posix_spawnp () funkcijos taip pat gali sugesti kai kuriais atvejais, pavyzdžiui:

EINVAL: Tai yra atvejis, kai vertė, kurią identifikuoja failo_veiksmai arba pritraukti nėra teisinga ir adekvati.

Kai pagrindinio šakės (2), šakės (2) ar klono (2) skambutis nepavyksta, neršti () funkcijos grąžins klaidos numerį.

ENOSYS: Taip yra tuo atveju, jei funkcija ir jos palaikymas neįtraukiami į sistemą arba jos nėra.

Išvada

Šioje pamokoje aptartos pagrindinės funkcijos, kurias teikia POSIX_spawn () ir funkcijas, kurias jis naudoja savo funkcijoms vykdyti ir vykdyti. Mes taip pat aptarėme vėliavas ir klaidas, kurias dažniausiai naudoja „Spawn“.

How to Change Mouse and Touchpad Settings Using Xinput in Linux
Most Linux distributions ship with “libinput” library by default to handle input events on a system. It can process input events on both Wayland and X...
Peržiūrėkite pelės mygtukus skirtingai programinei įrangai naudodami „X-Mouse Button Control“
Galbūt jums reikia įrankio, kuris galėtų pakeisti jūsų pelės valdymą kiekvienoje jūsų naudojamoje programoje. Tokiu atveju galite išbandyti programą, ...
„Microsoft Sculpt Touch“ belaidžio pelės apžvalga
Neseniai skaičiau apie „Microsoft Sculpt Touch“ belaidę pelę ir nusprendė ją nusipirkti. Kurį laiką naudojęs, nusprendžiau pasidalinti savo patirtimi....