C Programmēšana

POSIX nārsts ar C programmēšanu

POSIX nārsts ar C programmēšanu
Nārsts ir funkcija, ko POSIX izmanto, lai ielādētu un izpildītu bērnu procesus. Pašlaik POSIX notiekošais process vai nu turpināsies, vai arī neturpinās asinhroni izpildīt šos pakārtotos procesus un citus procesus. Ikreiz, kad tiek izveidots jauns apakšprocess, tam nepieciešama noteikta atmiņa, kas ļaus izpildīt vecāku un bērnu procesu. Microsoft Windows, UNIX un Linux ir noteikta nārstu saime; un citas nārstošanas funkciju ģimenes tiek uzskatītas par izvēles paplašinājumu.

Kāpēc izmantot POSIX Spawn?

The posix_spawn () un posix_spawnp () funkcijas tiek izmantotas, lai izveidotu jaunu bērnu procesu. Pēc tam bērna process izpilda failu. Šīs funkcijas POSIX noteica, lai standartizētu jaunu procesu izveidošanas mašīnām, kurām nav dakšu sistēmas zvanu atbalsta. Šīs mašīnas parasti ir mazas, un tām nav iegulto sistēmu lMMU atbalstam.

Abas funkcijas apvieno dakšiņu un exec, ar dažām papildu darbībām, kas izpildīs bērnu. Tie darbojas kā funkcionalitātes apakškopa, kas parasti tiek panākta ar dakšiņu, visiem sistēmas zvaniem un iegultajām sistēmām, kurām šādas funkcionalitātes trūkst.

1. piemērs: posix_spawn ()

Šajā piemērā mēs izmantosim spawn () funkciju, lai izveidotu un izpildītu jaunu bērnu procesu. Tad mēs izskaidrosim visus attiecīgos argumentus, kas izmantoti funkcijā.

Piemēri ir izmantoti šādi argumenti:

Arguments Apraksts
Izmanto, lai noteiktu visas nārsta darbības.
ceļš Izpildāmā ceļa nosaukums.
fd_count Ierakstu skaits ar masīvu fd_map. Ja fd_count ir vienāds ar 0, tad fd_map tiek ignorēts. Šādos gadījumos bērna process pārņem visus failu aprakstus, neņemot vērā modificētos.
fd_karte
Failu deskriptoru klāsts, ko mantos bērna process. Ja fd_count vērtība nav 0, tad fd_map ir nepieciešams, lai fd_count failu deskriptorus sasniegtu līdz OPEN_MAX augstākajai vērtībai. Tajā ir:

· Bērna procesa ievadīšana

· Rezultāts

· Kļūdu vērtības

mantot Strukturālā mantošana parāda, ka lietotāji vēlas, lai viņu bērna process visu pārņemtu no vecākiem.
argv Norāde uz konkrētu argumentu vektoru. Argv [0] vērtība nevar būt NULL, un tai jābūt faila nosaukumam, kas tiek ielādēts. Argv vērtība nevar būt vienāda ar NULL.
envp Norāda uz rakstzīmju masīvu masīvu. Katrs no šī masīva rādītājiem norāda uz vides mainīgo. Masīva beigu punkts ir NULL rādītājs.

2. piemērs: tests.c

Šajā piemērā tiek izveidots jauns pakārtotais process, lai palaistu komandu / bin / sh -c. Šī ir vērtība, kas nodota kā pirmais arguments. The pārbaude.c kods ir šāds:

Iepriekš minētajā piemērā mēs izsaucām bibliotēkas, pēc tam saucām nārstot.h galveni. Jūs redzēsiet arī posix_spawn () aicināts izveidot bērna procesu iepriekš minētajā piemērā. The nārstot un nārstot funkcijas tiek izmantotas dakša un izpild funkcijas. Nārsts () ir elastīgs un sniedz lietotājiem daudz viegluma daudzos veidos. Tas ir mazliet atšķirīgs no sistēma () un exec (). Tas atgriezīsies un radīs svaigu bērna procesu. Mūsu piemērā tā ir pid. Iepriekš redzams, ka gaidīšanas funkcija uzgaidīt (), pēc tam sistēma () tiek izmantots. Ievērojiet, ka nārstot () un dakša () izsaukšanas procesi ir vienādi, un ieviešanas metode abām funkcijām ir vairāk vai mazāk vienāda.

Tagad mēs izpildīsim piemēru, izmantojot a gcc sastādītājs. Varat arī izmantot jebkuru citu izvēlēto kompilatoru:

$ sudo gcc tests.c -lrt

Pēc tam palaidiet šo:

$ ./ a.ārā

Iepriekš minētās komandas izeja izskatīsies šādi:

Bērns pid tiks izveidots, kā redzat iepriekš minētajā izvadē.

Bibliotēka

Libc: Izmantojiet -lc, lai saistītu gcc sastādītājs. Ievērojiet, ka šī bibliotēka tiek automātiski iekļauta.

Nārsts ()

The nārstot () funkcijas pamatā ir POSIX 1003.1. standarta projekts izmantots kā posix_spawn (). C bibliotēkā ietilpst nārsta * () funkcijas. Šeit mēs uzskaitīsim dažus sufiksus kopā ar to aprakstiem:

e: izmanto kā masīvu vides mainīgajiem.

l: izmanto kā NULL izbeigtu programmas iekšienē izmantoto argumentu sarakstu.

p: izmanto, lai noteiktu relatīvo ceļu. Ja ceļa vērtība nav slīpsvītra, tad sistēma izmanto un meklē PATH vides mainīgo jebkurai līdzīgai programmai.

v: darbojas kā argumentu vektors programmas iekšienē.

Failu deskriptoru kartēšana

In nārstot (), mēs praktizējam fd_count un fd_karte argumenti, lai izsauktu failu aprakstus. Tajā norādīts, kuru bērnu mantot.

Numurs, kas tiek izmantots kā faila deskriptors bērna procesam, ir atkarīgs no tā atrašanās vietas fd_karte. Šeit mēs apsvērsim vecāku piemēru ar failu aprakstiem, kuru vērtība ir 1, 3 un 5, tad kartēšana būs aptuveni šāda:

>> int fd_map = 1, 3, 5;
Bērnam Vecākam
0 1
1 3
2 5

Ņemiet vērā, ka, ja izmantojat nepārprotamu fd_karte lai šie failu deskriptori būtu saskaņoti ar bērnu un vecākiem, jums ir jāaplāno SPWAN_FDCLOSE funkcija turpināt.

Mantojuma karogi

Spawn lietotājiem mantojuma gadījumā ir jāizsauc kāds no šiem karodziņiem. Daži nārsta karogu piemēri un to apraksti ir sniegti zemāk:

Karogs Apraksts
SPAWN_ALIGN_DEFAULT Šis karodziņš tiek izmantots, lai iestatītu izlīdzināšanas iestatījumu noklusējuma iestatījumus.
SPAWN_ALIGN_FAULT Šis karodziņš tiek izmantots kļūdainai datu atsauču pielīdzināšanai.
SPAWN_ALIGN_NOFAULT Šis karodziņš tiek izmantots, lai novērstu kļūdas novirzi.
SPAWN_DEBUG Šis karodziņš tiek izmantots kodola atkļūdošanai.
SPAWN_EXEC SPĀNIJA darbojas kā exec * (), izmantojot šo karodziņu.
SPAWN_EXPLICIT_CPU Šis karodziņš tiek izmantots, lai iestatītu palaišanas masku un mantotu mask = run mask biedru.
SPAWN_EXPLICIT_SCHED Šis karodziņš tiek izmantots, lai iestatītu plānošanas politiku.

The <nārstot.h> definē šo masku SPAWN_ALIGN_MASK izmanto, lai izlīdzinātu iepriekš uzskaitītos karodziņus.

pid_t pgroup Bērna procesa grupa, ja karoga dalībniekā norādāt SPAWN_SETGROUP.
int runmasks Bērna runmasks pārņem maskas, par kurām ir panākta vienošanās, pamatojoties uz šī dalībnieka vērtību.
sigset_t sigmask Signāla maska ​​bērna procesam, ko izmanto, lai norādītu karoga dalībnieku statusu.
sigset_t sigdefault Noklusēto signālu bērnu procesu kopa.

Kļūdas

The posix_spawn () un posix_spawnp () Dažos gadījumos funkcijas var arī neizdoties, piemēram:

EINVAL: Tas ir gadījums, kad vērtību identificē file_actions vai attrp nav pareizs un adekvāts.

Kad pamata dakšas (2), dakšas (2) vai klona (2) zvans neizdodas, nārstot () Funkcijas atgriezīs kļūdas numuru.

ENOSYS: Tas notiek gadījumā, ja funkcija un tās atbalsts sistēmā nav iekļauts vai nodrošināts.

Secinājums

Šī apmācība aptvēra pamata sniegtās funkcijas POSIX_spawn () un funkcijas, ko tā izmanto, lai izpildītu un veiktu savas funkcijas. Mēs arī aplūkojām karodziņus un kļūdas, kuras parasti lieto Nārsts.

Vidējā peles poga nedarbojas sistēmā Windows 10
The peles vidējā poga palīdz jums ritināt garas tīmekļa lapas un ekrānus ar lielu datu daudzumu. Ja tas apstājas, jūs galu galā izmantosiet tastatūru,...
Kā nomainīt peles kreiso un labo pogu operētājsistēmā Windows 10
Tas ir diezgan normāli, ka visas datora peles ierīces ir ergonomiski izstrādātas lietotājiem ar labo roku. Bet ir pieejamas peles ierīces, kas ir īpaš...
Atdariniet peles klikšķus, virzot kursoru, izmantojot operētājsistēmā Windows 10 bezklikšķu peli
Peles vai tastatūras lietošana nepareizā pozā, ja to lieto pārmērīgi daudz, var izraisīt daudz veselības problēmu, tostarp spriedzi, karpālā kanāla si...