C programozás

POSIX Spawn C programozással

POSIX Spawn C programozással
A Spawn egy olyan funkció, amelyet a POSIX-ban használnak a gyermekfolyamatok betöltésére és végrehajtására. A POSIX rendszerben futó folyamat ekkor vagy folytatja, vagy nem folytatja ezeket a gyermekfolyamatokat és más folyamatokat aszinkron módon. Amikor új alfolyamat jön létre, szüksége van valamilyen speciális memóriára, amely lehetővé teszi a szülő és a gyermek folyamatának végrehajtását. A Microsoft Windows, UNIX és Linux rendszerekben van egy bizonyos ívócsalád; és más ívási funkciójú családok opcionális kiterjesztésnek számítanak.

Miért érdemes használni a POSIX Spawn-t??

A posix_spawn () és posix_spawnp () a funkciókat egy új gyermekfolyamat létrehozására használják. A gyermek folyamat ezután végrehajt egy fájlt. Ezeket a funkciókat a POSIX határozta meg, hogy szabványosítsa az új folyamatok létrehozásának módszerét olyan gépek számára, amelyek nem rendelkeznek villa rendszer-hívás támogatással. Ezek a gépek általában kicsiek, és nincsenek beágyazott rendszereik az lMMU támogatásához.

A két funkció egyesíti a villát és az execet, néhány további lépéssel, amely végrehajtja a gyermeket. A funkciók részhalmazaként működnek, amelyeket általában villával érnek el minden olyan rendszerhívás és beágyazott rendszer számára, amelyek nem rendelkeznek ilyen funkcióval.

1. példa: posix_spawn ()

Ebben a példában a spawn () függvényt fogjuk használni egy új gyermek folyamat létrehozásához és végrehajtásához. Ezután elmagyarázzuk a függvényben használt összes releváns érvet.

A példában használt érvek a következők:

Érv Leírás
Az összes spawn műveletet meghatározza.
pálya A végrehajtandó útvonal neve.
fd_count Az fd_map tömböt tartalmazó bejegyzések száma. Ha az fd_szám megegyezik 0-val, akkor az fd_térkép figyelmen kívül marad. Ilyen esetekben a gyermekfolyamat örökli az összes fájlleírót, figyelmen kívül hagyva a módosítottakat.
fd_map
A gyermekfolyamat által öröklődő fájlleírók tömbje. Itt, ha az fd_count értéke nem 0, akkor az fd_map szükséges, hogy az fd_count fájlleírók az OPEN_MAX legfelsőbb értékéhez jussanak. A következőket tartalmazza:

· A gyermek folyamat bemenete

· A kimenet

· A hibaértékek

örököl A strukturális öröklés azt mutatja, hogy a felhasználók azt akarják, hogy gyermekük folyamata örököljön mindent a szülőtől.
argv A mutató egy adott argumentumvektorra. Az argv [0] érték nem lehet NULL, és a betöltött fájlnévnek kell lennie. Az argv értéke nem lehet egyenlő a NULL értékkel.
envp Karaktermutatók tömbjére mutat. A tömb minden mutatója egy környezeti változóra mutat. A tömb célpontja NULL mutató.

2. példa: teszt.c

A következő példában egy új gyermekfolyamat jön létre a parancs futtatásához / bin / sh -c. Ez az első argumentumként megadott érték. A teszt.c kód a következő:

A fenti példában felhívtuk a könyvtárakat, majd a ívik.h fejléc. Látni fogja a posix_spawn () a fenti példában gyermekfolyamat létrehozására hívják fel. A ívik és spawnp függvényeket használják a Villa és exec funkciókat. Ívik() rugalmas és sok szempontból sok könnyedséget nyújt a felhasználók számára. Kicsit különbözik ettől rendszer() és exec (). Visszatér és létrehozza a friss gyermek folyamatát. Példánkban az pid. Fent látható, hogy a várakozás funkció waitpid (), azután rendszer() használt. Figyeljük meg, hogy a ívik() és Villa() a hívási folyamatok megegyeznek, és a megvalósítás módja mindkét funkció esetében nagyjából azonos.

Most a példával hajtjuk végre a példát gcc fordítóprogram. Használhat bármely más fordítót is, amelyet választott:

$ sudo gcc teszt.c -lrt

Ezután futtassa a következőt:

$ ./ a.ki

A fenti parancs kimenete a következőképpen fog kinézni:

A gyermek pid létrejön, amint az a fenti kimeneten is látható.

Könyvtár

Libc: A -l összekapcsolásához használja a -lc gombot gcc fordítóprogram. Itt vegye figyelembe, hogy ez a könyvtár automatikusan bekerül.

Ívik()

A ívik() funkció a POSIX 1003-on alapul.Az 1. szabványtervezet a posix_spawn (). A C könyvtár tartalmazza a spawn * () függvényeket. Itt felsorolunk néhány utótagot, a leírásukkal együtt:

e: tömbként használják a környezeti változókhoz.

l: a programban használt argumentumok NULL végződésű listájaként használják.

p: relatív útvonal meghatározására szolgál. Ha az elérési út értéke nem perjel, akkor a rendszer bármilyen hasonló programot használ és keres a PATH környezeti változóban.

v: argumentumvektorként működik a programon belül.

Fájlleírók leképezése

Ban ben ívik(), gyakoroljuk a fd_count és fd_map érvek a fájlleírók előhívására. Meghatározza, hogy melyik gyermeket örökölje.

A gyermekfolyamat fájlleírójeként használt szám a fájlon belüli helyétől függ fd_map. Itt megvizsgáljuk az 1, 3 és 5 értékű fájlleírókkal rendelkező szülő példáját, akkor a leképezés valami ilyesmi lesz:

>> int fd_map = 1, 3, 5;
A gyermek számára A szülő számára
0 1
1 3
2 5

Vegye figyelembe, hogy ha explicitet használ fd_map hogy ezek a fájlleírók megfeleljenek a gyermeknek és a szülőnek, akkor feltérképeznie kell a SPWAN_FDCLOSE funkció folytatásához.

Öröklési zászlók

A Spawn-ban a felhasználóknak öröklés esetén a következő zászlók bármelyikét ki kell hívniuk. Néhány példa a Spawn zászlókra és azok leírása az alábbiakban található:

Zászló Leírás
SPAWN_ALIGN_DEFAULT Ez a jelző az igazítás beállításának alapértelmezett beállításainak megadására szolgál.
SPAWN_ALIGN_FAULT Ezt a jelzőt használják az adat hivatkozások hibás összehangolásához.
SPAWN_ALIGN_NOFAULT Ezt a zászlót használjuk a hiba eltolásának kijavítására.
SPAWN_DEBUG Ezt a zászlót használják a kernel hibakeresésére.
SPAWN_EXEC A SPAWN úgy működik, mint az exec * (), ezzel a zászlóval.
SPAWN_EXPLICIT_CPU Ez a jelző a futásmaszk beállítására és a mask = futásmaszk tag öröklésére szolgál.
SPAWN_EXPLICIT_SCHED Ez a jelző az ütemezési házirend beállítására szolgál.

A <ívik.h> meghatározza azt a maszkot SPAWN_ALIGN_MASK a fent felsorolt ​​zászlók igazítására szolgál.

pid_t pgroup A gyermekfolyamat-csoport, ha megadja a SPAWN_SETGROUP elemet a zászló tagjában.
int runmaszk A gyermek folyamatmaszkja annak a maszknak az öröklése érdekében, amelyben a tag értéke alapján állapodnak meg.
sigset_t sigmask A gyermek folyamat jelzőmaszkja, amely a zászlótagok állapotának megadására szolgál.
sigset_t sigdefault Az alapértelmezett jelek gyermekfolyamatainak halmaza.

Hibák

A posix_spawn () és posix_spawnp () a funkciók bizonyos esetekben meghibásodhatnak, például a következők:

EINVAL: Ez az eset áll fenn, amikor a file_actions vagy attrp nem helyes és megfelelő.

Amikor az alapul szolgáló villa (2), villa (2) vagy klón (2) hívás sikertelen, a ívik() A függvények hibaszámot adnak vissza.

ENOSYS: Ez akkor áll fenn, ha a függvény és annak támogatása nem szerepel a rendszerben, vagy nem biztosított.

Következtetés

Ez az oktatóanyag a POSIX_spawn () valamint a funkcióinak végrehajtására és végrehajtására használt funkciókat. Kitértünk a Spawn által gyakran használt zászlókra és hibákra is.

Az egér mozgásának vezérlése és kezelése több monitor között a Windows 10 rendszerben
Dual Display Mouse Manager lehetővé teszi az egér mozgásának vezérlését és konfigurálását több monitor között, lassítva annak mozgását a határ közeléb...
A WinMouse segítségével testre szabhatja és javíthatja az egérmutató mozgását a Windows PC-n
Ha szeretné javítani az egérmutató alapértelmezett funkcióit, használjon ingyenes programokat WinMouse. További funkciókat kínál, amelyek segítenek ab...
Az egér bal oldali gombja nem működik a Windows 10 rendszeren
Ha dedikált egeret használ laptopjával vagy asztali számítógépével, de a az egér bal gombja nem működik a Windows 10/8/7 rendszeren valamilyen oknál f...