C Programmering

POSIX Spawn med C-programmering

POSIX Spawn med C-programmering
Spawn är en funktion som används i POSIX för att ladda och utföra barnprocesser. Den pågående processen i POSIX fortsätter antingen att utföra dessa underprocesser och andra processer asynkront eller inte. Närhelst en ny delprocess skapas kräver det något specifikt minne som gör det möjligt för föräldra- och barnprocessen att köra. I Microsoft Windows, UNIX och Linux finns det en viss familj av lekar; och andra familjer med spawn-funktioner anses vara en valfri förlängning.

Varför använda POSIX Spawn?

De posix_spawn () och posix_spawnp () funktioner används båda för att skapa en ny underordnad process. Barnprocessen kör sedan en fil. Dessa funktioner specificerades av POSIX för att standardisera metoden för att skapa nya processer för maskiner som inte har stöd för gaffelsystem. Dessa maskiner är vanligtvis små och saknar de inbäddade systemen för lMMU-support.

De två funktionerna kombinerar gaffel och exekvering, med några ytterligare steg som kommer att köra barnet. De fungerar som en delmängd av funktioner, vanligtvis uppnås med en gaffel, för alla systemanrop och inbäddade system som saknar sådan funktionalitet.

Exempel 1: posix_spawn ()

I det här exemplet använder vi funktionen spawn () för att skapa och utföra en ny barnprocess. Sedan kommer vi att förklara alla relevanta argument som används i funktionen.

Argumenten som används i exemplet är följande:

Argument Beskrivning
Används för att definiera alla gyter som utför operationer.
väg Namnet på sökvägen som ska köras.
fd_count Antalet poster med matrisen fd_map. Om fd_count är lika med 0 ignoreras fd_map. I sådana fall ärver barnprocessen alla filbeskrivare och ignorerar de som har modifierats.
fd_map
En uppsättning filbeskrivare som ärvs av barnprocessen. Här, om värdet på fd_count inte är 0, behövs fd_map för att fd_count-filbeskrivarna upp till det högsta värdet OPEN_MAX. Det har:

· Ingången för barnprocessen

· Utgången

· Felvärdena

ärva Struct-arvet visar att användare vill att deras barnprocess ska ärva allt från föräldern.
argv Pekaren till en viss argumentvektor. Argv [0] -värdet kan inte vara NULL och måste vara det filnamn som laddas. Argv-värdet kan inte vara lika med NULL.
envp Pekar på en rad karaktärspekare. Var och en av pekarna i denna matris pekar på en miljövariabel. Slutpunkten för matrisen är en NULL-pekare.

Exempel 2: test.c

I följande exempel skapas en ny underordnad process för att köra kommandot med / bin / sh -c. Detta är värdet som skickades som det första argumentet. De testa.c koden är som följer:

I exemplet ovan kallade vi biblioteken, sedan kallade vi ge upphov till.h rubrik. Du kommer också att se posix_spawn () kallas för att skapa en barnprocess i exemplet ovan. De ge upphov till och spawnp används i stället för gaffel och exec funktioner. Ge upphov till() har flexibilitet och ger användarna mycket lätthet på många sätt. Det är lite olikt från systemet() och exec (). Det kommer tillbaka och skapar en ny barnprocess. I vårt exempel är det pid. Ovan kan du se att vänta-funktionen vänteläge (), sedan systemet() är använd. Lägg märke till att ge upphov till() och gaffel() anropsprocesser är desamma, och metoden för implementering är ungefär densamma för båda funktionerna.

Vi utför nu exemplet med hjälp av a gcc kompilator. Du kan också använda vilken annan kompilator du än väljer:

$ sudo gcc-test.c-lrt

Kör sedan följande:

$ ./ a.ut

Utgången från ovanstående kommando ser ut som följer:

Barnet pid kommer att skapas, som du kan se i ovanstående utdata.

Bibliotek

Libc: Använd -l c för att länka gcc kompilator. Observera här att detta bibliotek ingår automatiskt.

Ge upphov till()

De ge upphov till() funktionen är baserad på POSIX 1003.1d utkast standard som används som posix_spawn (). C-biblioteket innehåller spawn * () -funktioner. Här listar vi några suffix, tillsammans med deras beskrivningar:

e: används som en matris för miljövariabler.

l: används som en NULL-avslutad lista över argumenten som används i programmet.

p: används för att definiera en relativ sökväg. Om sökvägen inte har ett snedstreck i sitt värde använder systemet och söker i PATH-miljövariabeln för något liknande program.

v: fungerar som en vektor av argument inuti programmet.

Kartläggning av filbeskrivare

I ge upphov till(), vi övar på fd_count och fd_map argument för att kalla ut filbeskrivarna. Den anger vilket barn som ska ärva.

Antalet som används som en filbeskrivare för barnprocessen beror på dess placering inuti fd_map. Här kommer vi att överväga exemplet på föräldern med filbeskrivare värderade 1, 3 och 5, då kommer kartläggningen att vara ungefär så här:

>> int fd_map = 1, 3, 5;
För barnet För föräldern
0 1
1 3
2 5

Observera att om du använder det explicita fd_map För att matcha dessa filbeskrivare med barnet och föräldern måste du mappa SPWAN_FDCLOSE för att fortsätta.

Arvsflaggor

I Spawn måste användare ropa ut någon av följande flaggor vid arv. Några exempel på Spawn-flaggor och deras beskrivningar ges nedan:

Flagga Beskrivning
SPAWN_ALIGN_DEFAULT Denna flagga används för att ställa in standardinställningarna för inställningen för justering.
SPAWN_ALIGN_FAULT Denna flagga används för feljustering av datareferenserna.
SPAWN_ALIGN_NOFAULT Denna flagga används för att åtgärda feljusteringen.
SPAWN_DEBUG Denna flagga används för att felsöka kärnan.
SPAWN_EXEC SPAWN fungerar som exec * () med den här flaggan.
SPAWN_EXPLICIT_CPU Denna flagga används för att ställa in körmasken och ärva masken = kör maskmedlem.
SPAWN_EXPLICIT_SCHED Denna flagga används för att ställa in schemaläggningspolicyn.

De <ge upphov till.h> definierar den masken SPAWN_ALIGN_MASK används för att rikta in flaggorna ovan.

pid_t pgroup Den underordnade processgruppen om du anger SPAWN_SETGROUP i flaggans medlem.
int runmask Körmasken för barnprocessen för att ärva de masker som överenskommits baserat på värdet av denna medlem.
sigset_t sigmask Signalmasken för barnprocessen som används för att ange status för flaggmedlemmar.
sigset_t sigdefault Uppsättningen av de underordnade processerna för de förvalda signalerna.

Fel

De posix_spawn () och posix_spawnp () funktioner kan också misslyckas i vissa fall, till exempel följande:

EINVAL: Detta är fallet när värdet identifieras av file_actions eller attrp är inte korrekt och adekvat.

När den underliggande gaffeln (2), gaffeln (2) eller klonen (2) misslyckas, ge upphov till() funktioner returnerar ett felnummer.

ENOSYS: Detta är fallet om funktionen och dess stöd inte ingår eller tillhandahålls i ett system.

Slutsats

Denna handledning behandlade de grundläggande funktionerna som tillhandahålls av POSIX_spawn () och de funktioner som den använder för att utföra och utföra dess funktioner. Vi täckte också flaggor och fel som vanligtvis används av Spawn.

Topp 10 spel att spela på Ubuntu
Windows-plattformen har varit en av de dominerande plattformarna för spel på grund av den enorma andelen spel som utvecklas idag för att stödja Window...
5 bästa arkadspel för Linux
Numera är datorer seriösa maskiner som används för spel. Om du inte kan få den nya poängen vet du vad jag menar. I det här inlägget kommer du att känn...
Strid om Wesnoth 1.13.6 Utveckling släppt
Strid om Wesnoth 1.13.6 släpptes förra månaden, är den sjätte utvecklingsversionen i 1.13.x-serien och den levererar ett antal förbättringar, framför ...