C Programiranje

POSIX Spawn s programiranjem C

POSIX Spawn s programiranjem C
Spawn je funkcija, ki se uporablja v POSIX-u za nalaganje in izvajanje podrejenih procesov. Trenutno izvajani postopek v sistemu POSIX bo nato nadaljeval ali ne bo še naprej asinhrono izvajal te podrejene procese in druge procese. Vsakič, ko se ustvari nov podproces, potrebuje določen pomnilnik, ki bo omogočil izvajanje starševskega in podrejenega procesa. V sistemih Microsoft Windows, UNIX in Linux obstaja določena družina drstij; in druge družine drstnih funkcij veljajo za neobvezno razširitev.

Zakaj uporabljati POSIX Spawn?

The posix_spawn () in posix_spawnp () funkcije se uporabljata za ustvarjanje novega podrejenega procesa. Nadrejeni postopek nato izvrši datoteko. Te funkcije je POSIX določil za standardizacijo metode ustvarjanja novih procesov za stroje, ki nimajo podpore za sistemske klice z vilicami. Ti stroji so običajno majhni in nimajo vgrajenih sistemov za podporo lMMU.

Funkciji kombinirata fork in exec z nekaj dodatnimi koraki, ki bodo izvedli otroka. Delujejo kot podskupina funkcionalnosti, ki se običajno dosežejo z vilicami, za vse sistemske klice in vdelane sisteme, ki nimajo takšne funkcionalnosti.

Primer 1: posix_spawn ()

V tem primeru bomo uporabili funkcijo spawn () za ustvarjanje in izvajanje novega podrejenega procesa. Nato bomo razložili vse ustrezne argumente, uporabljene v funkciji.

Argumenti, uporabljeni v primeru, so naslednji:

Prepir Opis
Uporablja se za definiranje vseh operacij drstitve.
pot Ime poti, ki jo je treba izvesti.
fd_count Število vnosov z matriko fd_map. Če je fd_count enak 0, je fd_map prezrt. V takih primerih podrejeni proces podeduje vse deskriptorje datotek, pri čemer ne upošteva tistih, ki so bili spremenjeni.
fd_map
Niz deskriptorjev datotek, ki jih bo podedoval podrejeni postopek. Če vrednost fd_count tukaj ni 0, potem je fd_map potreben, da pripelje opisnike datotek fd_count do najvišje vrednosti OPEN_MAX. Ima:

· Otrok vnese proces

· Rezultat

· Vrednosti napak

podedovati Dedovanje struktur kaže, da uporabniki želijo, da njihov podrejeni proces podeduje vse od starša.
argv Kazalec na določen vektor argumentov. Vrednost argv [0] ne sme biti NULL in mora biti ime datoteke, ki se nalaga. Vrednost argv ne more biti enaka NULL.
envp Kaže na vrsto kazalcev na znake. Vsak od kazalcev v tej matriki kaže na spremenljivko okolja. Končna točka polja je kazalec NULL.

Primer 2: test.c

V naslednjem primeru je ustvarjen nov podrejeni postopek za zagon ukaza / bin / sh -c. To je vrednost, podana kot prvi argument. The preskus.c koda je naslednja:

V zgornjem primeru smo poklicali knjižnice, nato pa drsti.h glava. Videli boste tudi posix_spawn () poklican, da v zgornjem primeru ustvari podrejeni postopek. The drsti in drstenjep funkcije se uporabljajo namesto vilice in izvrš funkcije. Drstenje () ima fleksibilnost in uporabnikom v mnogih pogledih zagotavlja veliko lahkoto. Je nekoliko drugačen od sistem () in exec (). Vrnil se bo in ustvaril svež otroški postopek. V našem primeru je pid. Zgoraj lahko vidite, da deluje funkcija čakanja waitpid (), potem sistem () se uporablja. Upoštevajte, da drsti () in vilice () klicni procesi so enaki, način izvedbe pa je bolj ali manj enak za obe funkciji.

Zdaj bomo primer izvedli z uporabo gcc prevajalnik. Uporabite lahko tudi kateri koli drug prevajalnik po vaši izbiri:

$ sudo gcc test.c -lrt

Nato zaženite naslednje:

$ ./ a.ven

Izhod zgornjega ukaza bo videti tako:

Otrok pid bo ustvarjen, kot lahko vidite v zgornjem izhodu.

Knjižnica

Libc: Za povezavo uporabite -l c gcc prevajalnik. Tukaj upoštevajte, da je ta knjižnica vključena samodejno.

Drstenje ()

The drsti () funkcija temelji na POSIX 1003.1d osnutek standarda, uporabljen kot posix_spawn (). Knjižnica C vključuje funkcije spawn * (). Tu bomo našteli nekaj končnic, skupaj z njihovimi opisi:

e: uporablja se kot polje za spremenljivke okolja.

l: uporabljen kot NULL-zaključen seznam argumentov, uporabljenih znotraj programa.

p: se uporablja za definiranje relativne poti. Če pot nima poševnice v vrednosti, potem sistem uporabi in poišče spremenljivko okolja PATH za kateri koli podoben program.

v: deluje kot vektor argumentov znotraj programa.

Preslikava deskriptorjev datotek

V drsti (), vadimo fd_count in fd_map argumenti za klic deskriptorjev datotek. Določa, katerega otroka naj podeduje.

Številka, ki se uporablja kot deskriptor datoteke za podrejeni postopek, je odvisna od njegove lokacije znotraj fd_map. Tu bomo obravnavali primer nadrejenega z deskriptorji datotek z vrednostjo 1, 3 in 5, nato pa bo preslikava približno takšna:

>> int fd_map = 1, 3, 5;
Za otroka Za starša
0 1
1 3
2 5

Upoštevajte, da če uporabljate eksplicitno fd_map Če želite te deskriptorje datotek povezati z otrokom in staršem, morate preslikati SPWAN_FDCLOSE funkcijo za nadaljevanje.

Zastave dedovanja

V Spawnu morajo uporabniki v primeru dedovanja poklicati katero koli od naslednjih zastavic. Nekaj ​​primerov zastav Spawn in njihovi opisi so navedeni spodaj:

Zastava Opis
SPAWN_ALIGN_DEFAULT Ta zastava se uporablja za nastavitev privzetih nastavitev nastavitve za poravnavo.
SPAWN_ALIGN_FAULT Ta zastava se uporablja za napačno poravnavo referenc podatkov.
SPAWN_ALIGN_NOFAULT Ta zastava se uporablja za odpravo neusklajenosti napake.
SPAWN_DEBUG Ta zastava se uporablja za razhroščevanje jedra.
SPAWN_EXEC SPAWN deluje kot exec * () z uporabo te zastave.
SPAWN_EXPLICIT_CPU Ta zastava se uporablja za nastavitev maske za zagon in podedovanje člana mask = run mask.
SPAWN_EXPLICIT_SCHED Ta zastava se uporablja za nastavitev pravilnika o načrtovanju.

The <drsti.h> definira to masko SPAWN_ALIGN_MASK uporablja za poravnavo zgoraj naštetih zastavic.

pid_t pgroup Podrejena skupina procesov, če v članu zastave podate SPAWN_SETGROUP.
int runmask Zagon maske podrejenega procesa za podedovanje mask, dogovorjenih glede na vrednost tega člana.
sigset_t sigmask Signalna maska ​​za podrejeni postopek, ki se uporablja za določanje statusa članov zastave.
sigset_t sigdefault Nabor podrejenih procesov privzetih signalov.

Napake

The posix_spawn () in posix_spawnp () funkcije lahko v nekaterih primerih tudi odpovejo, na primer naslednje:

EINVAL: To je primer, ko vrednost, ki jo je določil file_actions ali attrp ni pravilna in ustrezna.

Ko spodnji klic vilic (2), vilic (2) ali klona (2) ne uspe, se drsti () funkcije vrnejo številko napake.

ENOSYS: To velja, če funkcija in njena podpora ni vključena ali zagotovljena v sistemu.

Zaključek

Ta vadnica je zajela osnovne funkcionalnosti, ki jih ponuja POSIX_spawn () in funkcije, ki jih uporablja za izvajanje in izvajanje svojih funkcij. Pokrili smo tudi zastave in napake, ki jih Spawn pogosto uporablja.

Kako uporabljati GameConqueror Cheat Engine v Linuxu
Članek zajema vodnik o uporabi varalnice GameConqueror v Linuxu. Številni uporabniki, ki igrajo igre v sistemu Windows, pogosto uporabljajo aplikacijo...
Najboljši emulatorji igralne konzole za Linux
V tem članku bo navedena priljubljena programska oprema za emulacijo igralne konzole, ki je na voljo za Linux. Emulacija je sloj združljivosti program...
Najboljši Linux Distros za igre na srečo v letu 2021
Operacijski sistem Linux je daleč od prvotnega, preprostega, strežniškega videza. Ta OS se je v zadnjih letih izjemno izboljšal in se je zdaj razvil v...