C Programmering

POSIX gyde med C-programmering

POSIX gyde med C-programmering
Spawn er en funktion, der bruges i POSIX til at indlæse og udføre underordnede processer. Den aktuelt kørende proces i POSIX vil derefter enten fortsætte eller ikke fortsætte med at udføre disse underordnede processer og andre processer asynkront. Hver gang der oprettes en ny underproces, kræver det en bestemt hukommelse, der gør det muligt for forældre- og barneprocessen at udføre. I Microsoft Windows, UNIX og Linux er der en bestemt familie af gyder; og andre familier med spawn-funktioner betragtes som en valgfri udvidelse.

Hvorfor bruge POSIX Spawn?

Det posix_spawn () og posix_spawnp () funktioner bruges begge til at oprette en ny underordnet proces. Underordnet proces udfører derefter en fil. Disse funktioner blev specificeret af POSIX for at standardisere metoden til at oprette nye processer til maskiner, der ikke har support til gaffelsystemopkald. Disse maskiner er normalt små og mangler de integrerede systemer til lMMU-support.

De to funktioner kombinerer gaffel og udførelse med nogle yderligere trin, der udfører barnet. De fungerer som en delmængde af funktionaliteter, der normalt opnås med en gaffel, for alle systemopkald og indlejrede systemer, der mangler sådan funktionalitet.

Eksempel 1: posix_spawn ()

I dette eksempel bruger vi funktionen spawn () til at oprette og udføre en ny underordnet proces. Derefter forklarer vi alle de relevante argumenter, der bruges i funktionen.

Argumenterne anvendt i eksemplet er som følger:

Argument Beskrivelse
Bruges til at definere alle operationer, der udfører gyder.
sti Navnet på den sti, der skal udføres.
fd_count Antallet af poster med arrayet fd_map. Hvis fd_count er lig med 0, ignoreres fd_map. I sådanne tilfælde arver barneprocessen alle filbeskrivere og ignorerer dem, der blev ændret.
fd_map
En række filbeskrivere, der skal arves af barneprocessen. Her, hvis værdien af ​​fd_count ikke er 0, så er fd_map nødvendig for at bringe fd_count-filbeskrivelserne op til en højeste værdi af OPEN_MAX. Det har:

· Input til barneprocessen

· Outputtet

· Fejlværdierne

arve Strukturarven viser, at brugerne ønsker, at deres barneproces skal arve alt fra forældrene.
argv Markøren til en bestemt argumentvektor. Argv [0] -værdien kan ikke være NULL og skal være det filnavn, der indlæses. Argv-værdien kan ikke være lig med NULL.
envp Peger på en række tegnmarkører. Hver af markørerne i dette array peger på en miljøvariabel. Matrixens slutpunkt er en NULL-markør.

Eksempel 2: test.c

I det følgende eksempel oprettes en ny underordnet proces til at køre kommandoen efter / bin / sh -c. Dette er den værdi, der blev sendt som det første argument. Det prøve.c koden er som følger:

I ovenstående eksempel kaldte vi bibliotekerne og kaldte derefter gyde.h header. Du vil også se posix_spawn () kaldes til at oprette en underordnet proces i ovenstående eksempel. Det gyde og spawnp funktioner bruges i stedet for gaffel og udføre funktioner. Gyde () har fleksibilitet og giver brugerne meget lethed på mange måder. Det er lidt anderledes end system() og udføre (). Det vender tilbage og skaber den nye barneproces. I vores eksempel er det pid. Ovenfor kan du se, at ventefunktionen ventetid (), derefter system() anvendes. Bemærk, at gyde () og gaffel() opkaldsprocesser er de samme, og metoden til implementering er mere eller mindre den samme for begge funktioner.

Vi udfører nu eksemplet ved hjælp af a gcc kompilator. Du kan også bruge enhver anden kompilator efter eget valg:

$ sudo gcc test.c -lrt

Kør derefter følgende:

$ ./en.ud

Outputtet fra ovenstående kommando ser ud som følger:

Barnet pid oprettes, som du kan se i ovenstående output.

Bibliotek

Libc: Brug -l c til at linke gcc kompilator. Her bemærkes, at dette bibliotek inkluderes automatisk.

Gyde ()

Det gyde () funktionen er baseret på POSIX 1003.1d udkast standard anvendes som posix_spawn (). C-biblioteket indeholder spawn * () -funktioner. Her vil vi liste et par suffikser sammen med deres beskrivelser:

e: bruges som en matrix for miljøvariabler.

l: bruges som en NULL-afsluttet liste over de argumenter, der bruges i programmet.

p: bruges til at definere en relativ sti. Hvis stien ikke har en skråstreg i dens værdi, bruger systemet og søger i PATH-miljøvariablen for et lignende program.

v: fungerer som en vektor af argumenter inde i programmet.

Kortlægning af filbeskrivere

I gyde (), vi øver på fd_count og fd_map argumenter for at kalde filbeskrivere ud. Det specificerer, hvilket barn der skal arves.

Antallet, der bruges som en filbeskrivelse til underordnet proces, afhænger af dets placering inde i fd_map. Her vil vi overveje forældrenes eksempel med filbeskrivere, der er værdiansat 1, 3 og 5, så vil kortlægningen være sådan noget:

>> int fd_map = 1, 3, 5;
For barnet For forældrene
0 1
1 3
2 5

Bemærk, at hvis du bruger eksplicit fd_map for at matche disse filbeskrivere med barnet og forældrene, skal du kortlægge SPWAN_FDCLOSE funktion for at fortsætte.

Arv Flag

I Spawn skal brugerne kalde et af følgende flag i tilfælde af arv. Nogle eksempler på Spawn-flag og deres beskrivelser er givet nedenfor:

Flag Beskrivelse
SPAWN_ALIGN_DEFAULT Dette flag bruges til at indstille standardindstillingerne for opsætningen til justering.
SPAWN_ALIGN_FAULT Dette flag bruges til fejljustering af datareferencerne.
SPAWN_ALIGN_NOFAULT Dette flag bruges til at rette fejljusteringen.
SPAWN_DEBUG Dette flag bruges til at debugge kernen.
SPAWN_EXEC SPAWN fungerer som exec * () ved hjælp af dette flag.
SPAWN_EXPLICIT_CPU Dette flag bruges til at indstille køremasken og arve masken = kør maske-medlem.
SPAWN_EXPLICIT_SCHED Dette flag bruges til at indstille planlægningspolitikken.

Det <gyde.h> definerer denne maske SPAWN_ALIGN_MASK bruges til at justere de ovennævnte flag.

pid_t pgroup Underordnet procesgruppe, hvis du angiver SPAWN_SETGROUP i flagets medlem.
int runmask Køremasken til barnets proces for at arve de masker, der er aftalt baseret på værdien af ​​dette medlem.
sigset_t sigmask Signalmasken til den underordnede proces, der bruges til at specificere status for flagmedlemmer.
sigset_t sigdefault Sættet med de underordnede processer for de standardiserede signaler.

Fejl

Det posix_spawn () og posix_spawnp () funktioner kan også mislykkes i nogle tilfælde, såsom følgende:

EINVAL: Dette er tilfældet, når værdien identificeret ved fil_handlinger eller attrp er ikke korrekt og tilstrækkelig.

Når den underliggende gaffel (2), gaffel (2) eller klon (2) kald mislykkes, gyde () funktioner returnerer et fejlnummer.

ENOSYS: Dette er tilfældet, hvis funktionen og dens support ikke er inkluderet eller leveret i et system.

Konklusion

Denne vejledning dækkede de grundlæggende funktioner leveret af POSIX_spawn () og de funktioner, der bruges af den til at udføre og udføre dens funktioner. Vi dækkede også flag og fejl, der ofte bruges af Spawn.

Sådan installeres League Of Legends på Ubuntu 14.04
Hvis du er fan af League of Legends, er dette en mulighed for dig at prøvekøre League of Legends. Bemærk, at LOL understøttes på PlayOnLinux, hvis du ...
Installer det nyeste OpenRA-strategispil på Ubuntu Linux
OpenRA er en Libre / Free Real Time Strategy-spilmotor, der genskaber de tidlige Westwood-spil som det klassiske Command & Conquer: Red Alert. Distrib...
Installer nyeste Dolphin Emulator til Gamecube & Wii på Linux
Dolphin Emulator giver dig mulighed for at spille dine valgte Gamecube & Wii-spil på Linux Personal Computers (PC). Som en frit tilgængelig og open s...