C Programmering

POSIX Gyte med C-programmering

POSIX Gyte med C-programmering
Gyte er en funksjon som brukes i POSIX for å laste og utføre barneprosesser. Den nåværende prosessen i POSIX vil enten fortsette eller ikke fortsette å utføre disse underordnede prosessene og andre prosesser asynkront. Hver gang en ny delprosess opprettes, krever det noe spesifikt minne som gjør at foreldre- og barneprosessen kan utføres. I Microsoft Windows, UNIX og Linux er det en viss familie av gyter; og andre familier med gytefunksjoner betraktes som en valgfri utvidelse.

Hvorfor bruke POSIX Spawn?

De posix_spawn () og posix_spawnp () funksjoner brukes begge til å lage en ny barneprosess. Barneprosessen kjører deretter en fil. Disse funksjonene ble spesifisert av POSIX for å standardisere metoden for å lage nye prosesser for maskiner som ikke har støtte for gaffelsystem. Disse maskinene er vanligvis små og mangler de innebygde systemene for lMMU-støtte.

De to funksjonene kombinerer gaffel og eksekvering, med noen ekstra trinn som vil utføre barnet. De fungerer som en delmengde av funksjoner, vanligvis oppnådd med en gaffel, for alle systemanrop og innebygde systemer som mangler slik funksjonalitet.

Eksempel 1: posix_spawn ()

I dette eksemplet vil vi bruke funksjonen spawn () til å lage og utføre en ny barneprosess. Deretter vil vi forklare alle relevante argumenter som brukes i funksjonen.

Argumentene som er brukt i eksemplet er som følger:

Argument Beskrivelse
Brukes til å definere alle gyteoperasjoner.
sti Navnet på banen som skal utføres.
fd_count Antall oppføringer med matrisen fd_map. Hvis fd_count er lik 0, ignoreres fd_map. I slike tilfeller arver barneprosessen alle filbeskrivelsene, og ignorerer de som ble endret.
fd_map
En rekke filbeskrivere som skal arves av barneprosessen. Her, hvis verdien av fd_count ikke er 0, er fd_map nødvendig for å bringe fd_count-filbeskrivelsene opp til den høyeste verdien OPEN_MAX. Det har:

· Barnet prosessinnspill

· Produksjonen

· Feilverdiene

arve Struct-arven viser at brukerne vil at barneprosessen skal arve alt fra foreldrene.
argv Pekeren til en bestemt argumentvektor. Argv [0] -verdien kan ikke være NULL og må være filnavnet som lastes inn. Argv-verdien kan ikke være lik NULL.
envp Peker på en rekke tegnpekere. Hver av pekerne i denne matrisen peker på en miljøvariabel. Målpunktet til matrisen er en NULL-peker.

Eksempel 2: test.c

I det følgende eksemplet opprettes en ny underordnet prosess for å kjøre kommandoen etter / søppel / sh -c. Dette er verdien som ble sendt som det første argumentet. De test.c koden er som følger:

I eksemplet ovenfor kalte vi bibliotekene, deretter kalte vi gyte.h Overskrift. Du vil også se posix_spawn () kalt for å lage en barneprosess i eksemplet ovenfor. De gyte og spawnp funksjoner brukes i stedet for gaffel og utføre funksjoner. Gyte () har fleksibilitet og gir brukerne mye brukervennlighet på mange måter. Det er litt forskjellig fra system() og utføre (). Det vil komme tilbake og skape den ferske barneprosessen. I vårt eksempel er det pid. Ovenfor kan du se at ventefunksjonen ventetid (), deretter system() benyttes. Legg merke til at gyte () og gaffel() anropsprosesser er de samme, og metoden for implementering er mer eller mindre den samme for begge funksjoner.

Vi vil nå utføre eksemplet ved hjelp av a gcc kompilator. Du kan også bruke hvilken som helst annen kompilator du ønsker:

$ sudo gcc test.c -lrt

Kjør deretter følgende:

$ ./en.ute

Utgangen fra kommandoen ovenfor vil se slik ut:

Barnet pid vil bli opprettet, som du kan se i utdataene ovenfor.

Bibliotek

Libc: Bruk -l c for å koble til gcc kompilator. Legg merke til at dette biblioteket inkluderes automatisk.

Gyte ()

De gyte () funksjonen er basert på POSIX 1003.1d utkast standard brukt som posix_spawn (). C-biblioteket inkluderer spawn * () -funksjoner. Her vil vi liste opp noen suffikser, sammen med beskrivelsene deres:

e: brukt som en matrise for miljøvariabler.

l: brukt som en NULL-avsluttet liste over argumentene som brukes i programmet.

p: brukes til å definere en relativ bane. Hvis banen ikke har en skråstrek i verdien, bruker systemet og søker i PATH-miljøvariabelen for et lignende program.

v: fungerer som en vektor av argumenter inne i programmet.

Kartlegging av filbeskrivere

I gyte (), vi øver på fd_count og fd_map argumenter for å kalle ut filbeskrivelsene. Den spesifiserer hvilket barn du skal arve.

Antallet som brukes som en filbeskrivelse for barneprosessen, avhenger av plasseringen inne i fd_map. Her vil vi vurdere eksemplet på foreldrene med filbeskrivere verdsatt 1, 3 og 5, så vil kartleggingen være omtrent slik:

>> int fd_map = 1, 3, 5;
For barnet For foreldrene
0 1
1 3
2 5

Merk at hvis du bruker eksplisitt fd_map for å matche disse filbeskrivelsene med barnet og foreldrene, må du kartlegge SPWAN_FDCLOSE funksjonen for å fortsette.

Arveflagg

I Spawn må brukerne ringe ut et av følgende flagg i tilfelle arv. Noen eksempler på Spawn-flagg og deres beskrivelser er gitt nedenfor:

Flagg Beskrivelse
SPAWN_ALIGN_DEFAULT Dette flagget brukes til å sette opp standardinnstillingene for oppsettet for justering.
SPAWN_ALIGN_FAULT Dette flagget brukes til feiljustering av datareferansene.
SPAWN_ALIGN_NOFAULT Dette flagget brukes til å fikse feiljusteringen.
SPAWN_DEBUG Dette flagget brukes til å feilsøke kjernen.
SPAWN_EXEC SPAWN fungerer som exec * () ved hjelp av dette flagget.
SPAWN_EXPLICIT_CPU Dette flagget brukes til å sette kjøremasken og arve masken = kjør maske medlem.
SPAWN_EXPLICIT_SCHED Dette flagget brukes til å angi planleggingspolitikken.

De <gyte.h> definerer den masken SPAWN_ALIGN_MASK brukes til å justere flaggene som er oppført ovenfor.

pid_t pgroup Underordnet prosessgruppe hvis du spesifiserer SPAWN_SETGROUP i flaggets medlem.
int runmask Kjøremasken til barneprosessen for å arve maskene som er avtalt basert på verdien av dette medlemmet.
sigset_t sigmask Signalmasken for barneprosessen som brukes til å spesifisere status for flaggmedlemmer.
sigset_t sigdefault Settet med underordnede prosesser for misligholdte signaler.

Feil

De posix_spawn () og posix_spawnp () funksjoner kan også mislykkes i noen tilfeller, for eksempel følgende:

EINVAL: Dette er tilfelle når verdien identifisert av filaksjoner eller attrp er ikke riktig og tilstrekkelig.

Når den underliggende gaffelen (2), gaffelen (2) eller klonen (2) anrop mislykkes, gyte () funksjoner vil returnere et feilnummer.

ENOSYS: Dette er tilfelle hvis funksjonen og støtten ikke er inkludert eller gitt i et system.

Konklusjon

Denne opplæringen dekket de grunnleggende funksjonene som tilbys av POSIX_spawn () og funksjonene den bruker for å utføre og utføre funksjonene. Vi dekket også flaggene og feilene som ofte brukes av Spawn.

Mus Topp 5 ergonomiske datamuseprodukter for Linux
Topp 5 ergonomiske datamuseprodukter for Linux
Gir langvarig bruk av datamaskiner smerter i håndleddet eller fingrene? Lider du av stive ledd og må hele tiden riste på deg hendene? Føler du en bren...
Mus Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
Hvordan endre mus og berøringsplateinnstillinger ved hjelp av Xinput i Linux
De fleste Linux-distribusjoner leveres med "libinput" -biblioteket som standard for å håndtere inngangshendelser på et system. Den kan behandle inngan...
Mus Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kartlegg museknappene på en annen måte for annen programvare med X-Mouse Button Control
Kanskje du trenger et verktøy som kan gjøre at musens kontroll endres med hvert program du bruker. Hvis dette er tilfelle, kan du prøve et program som...