C Programmeerimine

C-programmeerimisega POSIX Spawn

C-programmeerimisega POSIX Spawn
Kudemine on funktsioon, mida POSIXis kasutatakse lapse protsesside laadimiseks ja käivitamiseks. Praegu POSIXis käiv protsess jätkub või ei jätka nende alamprotsesside ja muude protsesside asünkroonset käivitamist. Alati, kui luuakse uus alamprotsess, vajab see teatud spetsiifilist mälu, mis võimaldab vanema ja lapse protsessil teostada. Microsoft Windowsis, UNIXis ja Linuxis on teatud kudemisperekond; ja muid kudemisfunktsioonide perekondi peetakse valikuliseks laienduseks.

Miks kasutada POSIX Spawn?

The posix_spawn () ja posix_spawnp () funktsioone kasutatakse mõlemad uue lapseprotsessi loomiseks. Seejärel käivitab lapseprotsess faili. Need funktsioonid määras POSIX, et ühtlustada uute protsesside loomise meetod masinatele, millel pole kahvli süsteemikõne tuge. Need masinad on tavaliselt väikesed ja neil puudub lMMU toe jaoks sisseehitatud süsteem.

Need kaks funktsiooni ühendavad kahvli ja execi koos mõne täiendava sammuga, mis lapse hukatakse. Need toimivad funktsionaalsuste alamhulgana, mis tavaliselt saavutatakse kahvli abil kõigi süsteemikõnede ja manustatud süsteemide jaoks, millel puudub selline funktsionaalsus.

Näide 1: posix_spawn ()

Selles näites kasutame uue lapse protsessi loomiseks ja teostamiseks funktsiooni spawn (). Seejärel selgitame kõiki funktsioonis kasutatud asjakohaseid argumente.

Näites kasutatud argumendid on järgmised:

Argument Kirjeldus
Kasutatakse kõigi kudemist teostavate toimingute määratlemiseks.
tee Käivitatava tee nimi.
fd_count Massiiviga fd_map sisalduvate kirjete arv. Kui fd_count on võrdne 0-ga, ignoreeritakse fd_map-i. Sellistel juhtudel pärib lapseprotsess kõik failikirjeldajad, eirates neid, mida muudeti.
fd_map
Lapseprotsessi poolt pärandatav failide kirjeldajate massiiv. Kui fd_count väärtus pole 0, on faili fd_count kirjeldajate viimiseks ülemise väärtuseni OPEN_MAX vaja fd_map. Sellel on:

· Lapse protsessi sisend

· Väljund

· Vea väärtused

pärima Struktureeritud pärand näitab, et kasutajad soovivad, et nende lapseprotsess päriks kõik vanemalt.
argv Konkreetse argumendivektori kursor. Argv [0] väärtus ei saa olla NULL ja see peab olema laaditav failinimi. Argv väärtus ei saa olla võrdne väärtusega NULL.
envp Osutab tähemärkide reale. Iga selle massiivi osuti osutab keskkonnamuutujale. Massiivi lõpp-punkt on NULL-osuti.

Näide 2: test.c

Järgmises näites luuakse uus alamprotsess käsu käivitamiseks / bin / sh -c. See on esimese argumendina edastatud väärtus. The test.c kood on järgmine:

Ülaltoodud näites helistasime raamatukogudele ja seejärel nimele kudema.h päis. Näete ka posix_spawn () ülaltoodud näites kutsutakse üles looma lapseprotsess. The kudema ja kudema funktsioone kasutatakse kahvel ja exec funktsioone. Kudema () on paindlik ja pakub kasutajatele palju võimalusi mitmel viisil. See on pisut erinev süsteem () ja exec (). See naaseb ja loob uue lapse protsessi. Meie näites on see nii pid. Eespool näete, et ootefunktsioon ootama (), siis süsteem () kasutatakse. Pange tähele, et kudema () ja kahvel () helistamisprotsessid on samad ja mõlema funktsiooni puhul on rakendamise meetod enam-vähem sama.

Nüüd täidame näite, kasutades a gcc koostaja. Võite kasutada ka mõnda muud valitud kompilaatorit:

$ sudo gcc test.c -lrt

Järgmisena käivitage järgmine:

$ ./ a.välja

Ülaltoodud käsu väljund näeb välja järgmine:

Laps pid luuakse, nagu näete ülaltoodud väljundist.

Raamatukogu

Libc: Lingi linkimiseks kasutage -lc gcc koostaja. Pange tähele, et see teek kaasatakse automaatselt.

Kudema ()

The kudema () funktsioon põhineb POSIX 1003-l.1. standardi mustandit kasutatakse posix_spawn (). C-teek sisaldab kudemisfunktsiooni * (). Siin loetleme mõned sufiksid koos nende kirjeldustega:

e: kasutatakse keskkonnamuutujate massiivina.

l: kasutatakse NULL-lõpetatud loendina programmis kasutatud argumentidest.

p: kasutatakse suhtelise tee määratlemiseks. Kui tee väärtus ei ole kaldkriipsuga, kasutab süsteem ja otsib keskkonnamuutujat PATH mis tahes sarnase programmi jaoks.

v: toimib programmi sees olevate argumentide vektorina.

Failide kirjeldajate kaardistamine

Sisse kudema (), me harjutame fd_count ja fd_map argumendid failikirjeldajate väljakutsumiseks. See täpsustab, millise lapse pärida.

Lapseprotsessi failikirjeldajana kasutatav number sõltub selle asukohast fd_map. Siinkohal kaalume vanema näidet failikirjeldajatega, mille väärtus on 1, 3 ja 5, siis on kaardistamine umbes selline:

>> int fd_map = 1, 3, 5;
Lapse jaoks Vanemale
0 1
1 3
2 5

Pange tähele, et kui kasutate selgesõnalist fd_map Nende failikirjeldajate sobitamiseks lapse ja vanemaga peate selle kaardistama SPWAN_FDCLOSE funktsiooni jätkamiseks.

Pärandilipud

Spawnis peavad kasutajad pärimise korral välja kutsuma mõne järgmise lipu. Mõned näited Spawn lippudest ja nende kirjeldustest on toodud allpool:

Lipp Kirjeldus
SPAWN_ALIGN_DEFAULT Seda lippu kasutatakse joondamise seadistuse vaikeseadete seadistamiseks.
SPAWN_ALIGN_FAULT Seda lippu kasutatakse andmete viidete vea joondamiseks.
SPAWN_ALIGN_NOFAULT Seda lippu kasutatakse tõrke vea parandamiseks.
SPAWN_DEBUG Seda lippu kasutatakse tuuma silumiseks.
SPAWN_EXEC SPAWN toimib seda lippu kasutades nagu exec * ().
SPAWN_EXPLICIT_CPU Seda lippu kasutatakse käivitamismaski määramiseks ja maski = jooksu maski liikme pärimiseks.
SPAWN_EXPLICIT_SCHED Seda lippu kasutatakse ajastamise poliitika määramiseks.

The <kudema.h> määratleb selle maski SPAWN_ALIGN_MASK kasutatakse eespool loetletud lippude joondamiseks.

pid_t pgroup Lapseprotsessi rühm, kui määrate lipuliikmes SPAWN_SETGROUP.
int runmask Lapse runmask pärib selle liikme väärtusest lähtuvalt kokku lepitud maskid.
sigset_t sigmask Alamprotsessi signaalimask, mida kasutatakse lipuliikmete oleku määramiseks.
sigset_t sigdefault Vaikimisi signaalide alamprotsesside komplekt.

Vead

The posix_spawn () ja posix_spawnp () funktsioonid võivad ka teatud juhtudel ebaõnnestuda, näiteks järgmised:

EINVAL: Seda juhul, kui väärtus, mille tähistab faili toimingud või attrp ei ole õige ja adekvaatne.

Kui aluseks oleva kahvli (2), kahvli (2) või klooni (2) kõne nurjub, siis kudema () funktsioonid tagastavad vea numbri.

ENOSYS: Seda juhul, kui funktsioon ja selle tugi ei kuulu süsteemi ega paku seda.

Järeldus

See õpetus käsitles põhifunktsioonid, mille pakkus POSIX_spawn () ja funktsioonid, mida ta kasutab oma funktsioonide täitmiseks ja täitmiseks. Samuti käsitlesime Spawani tavaliselt kasutatavaid lippe ja vigu.

Kuidas näidata FPS-loendurit Linuxi mängudes
Linuxi mängimine sai suure tõuke, kui Valve teatas Steam-kliendi ja nende mängude Linuxi toest 2012. aastal. Sellest ajast peale on paljud AAA- ja ind...
Sid Meieri Civilization VI allalaadimine ja mängimine Linuxis
Sissejuhatus mängu Civilization 6 on kaasaegne kontseptsioon, mis tutvustati Age of Empires mängude sarjas. Idee oli üsna lihtne; alustaksite kõige põ...
Kuidas installida ja mängida Doomi Linuxis
Doomi sissejuhatus Doom-seeria sai alguse 90ndatel pärast algse Doomi väljaandmist. See oli kohene hitt ja sellest ajast alates on mänguseeria pälvinu...