C Programování

POSIX se objeví s programováním C

POSIX se objeví s programováním C
Umístit je funkce používaná v POSIXu k načítání a spouštění podřízených procesů. Aktuálně spuštěný proces v POSIXu pak bude pokračovat nebo nebude pokračovat v provádění těchto podřízených procesů a dalších procesů asynchronně. Kdykoli je vytvořen nový dílčí proces, vyžaduje určitou specifickou paměť, která umožní spuštění nadřazeného a podřízeného procesu. V Microsoft Windows, UNIX a Linux existuje určitá rodina spawnů; a další rodiny funkcí spawnu jsou považovány za volitelné rozšíření.

Proč používat POSIX Spawn?

The posix_spawn () a posix_spawnp () obě funkce se používají k vytvoření nového podřízeného procesu. Podřízený proces poté provede soubor. Tyto funkce byly specifikovány POSIXem pro standardizaci metody vytváření nových procesů pro stroje, které nemají podporu volání systémových vidlic. Tyto stroje jsou obvykle malé a postrádají vestavěné systémy pro podporu lMMU.

Tyto dvě funkce kombinují vidličku a exec s několika dalšími kroky, které dítě provedou. Fungují jako podmnožina funkcí, obvykle dosažených pomocí vidlice, pro všechna systémová volání a vestavěné systémy, které takovou funkčnost nemají.

Příklad 1: posix_spawn ()

V tomto příkladu použijeme funkci spawn () k vytvoření a provedení nového podřízeného procesu. Poté vysvětlíme všechny relevantní argumenty použité ve funkci.

Argumenty použité v příkladu jsou následující:

Argument Popis
Používá se k definování všech operací provádějících spawn.
cesta Název cesty, která má být provedena.
fd_count Počet položek s polem fd_map. Pokud je fd_count rovno 0, pak je fd_map ignorováno. V takových případech podřízený proces zdědí všechny deskriptory souborů, ignoruje ty, které byly změněny.
fd_map
Pole deskriptorů souborů, které mají být zděděny podřízeným procesem. Tady, pokud hodnota fd_count není 0, pak je fd_map potřeba, aby deskriptory souborů fd_count dosáhly nejvyšší hodnoty OPEN_MAX. Má to:

· Vstup procesu dítěte

· Výstup

· Chybové hodnoty

zdědit Strukturální dědičnost ukazuje, že uživatelé chtějí, aby jejich podřízený proces zdědil vše od rodiče.
argv Ukazatel na konkrétní vektor argumentu. Hodnota argv [0] nemůže mít NULL a musí to být načítaný název souboru. Hodnota argv se nemůže rovnat NULL.
envp Odkazuje na pole ukazatelů znaků. Každý z ukazatelů v tomto poli ukazuje na proměnnou prostředí. Cílovým bodem pole je ukazatel NULL.

Příklad 2: test.C

V následujícím příkladu je vytvořen nový podřízený proces, který spustí příkaz / bin / sh -c. Toto je hodnota předaná jako první argument. The test.C kód je následující:

Ve výše uvedeném příkladu jsme nazvali knihovny a poté nazvali potěr.h záhlaví. Uvidíte také posix_spawn () povolán k vytvoření podřízeného procesu ve výše uvedeném příkladu. The potěr a spawnp funkce se používají místo Vidlička a vykon funkce. Potěr() má flexibilitu a poskytuje uživatelům mnoho pohodlí v mnoha ohledech. Je to trochu odlišné od Systém() a exec (). Vrátí se a vytvoří nový podřízený proces. V našem příkladu je pid. Nahoře vidíte, že funkce čekání waitpid (), pak Systém() se používá. Všimněte si, že potěr() a Vidlička() volací procesy jsou stejné a způsob implementace je víceméně stejný pro obě funkce.

Nyní provedeme příklad pomocí a gcc překladač. Můžete také použít jakýkoli jiný překladač podle vašeho výběru:

$ sudo gcc test.c -lrt

Dále spusťte následující:

$ ./A.ven

Výstup výše uvedeného příkazu bude vypadat takto:

Dítě pid bude vytvořeno, jak vidíte ve výše uvedeném výstupu.

Knihovna

Libc: Použijte -l c k propojení gcc překladač. Zde si všimněte, že tato knihovna je zahrnuta automaticky.

Potěr()

The potěr() funkce je založena na POSIX 1003.1d návrh standardu použit jako posix_spawn (). Knihovna C obsahuje funkce spawn * (). Zde uvedeme několik přípon spolu s jejich popisy:

E: používá se jako pole pro proměnné prostředí.

já: používá se jako NULL ukončený seznam argumentů použitých uvnitř programu.

p: slouží k definování relativní cesty. Pokud cesta nemá lomítko ve své hodnotě, pak systém použije a prohledá proměnnou prostředí PATH pro podobný program.

proti: funguje jako vektor argumentů uvnitř programu.

Mapování deskriptorů souborů

v potěr(), cvičíme fd_count a fd_map argumenty k vyvolání deskriptorů souborů. Určuje, které dítě zdědí.

Číslo použité jako deskriptor souboru pro podřízený proces závisí na jeho umístění uvnitř fd_map. Zde budeme uvažovat o příkladu rodiče s deskriptory souborů s hodnotou 1, 3 a 5, poté bude mapování něco takového:

>> int fd_map = 1, 3, 5;
Pro dítě Pro rodiče
0 1
1 3
2 5

Všimněte si, že pokud používáte explicitní fd_map Chcete-li porovnat tyto deskriptory souborů s dítětem a rodičem, musíte namapovat SPWAN_FDCLOSE funkce pokračovat.

Dědičné příznaky

Ve Spawnu musí uživatelé v případě dědičnosti vyvolat některý z následujících příznaků. Níže jsou uvedeny některé příznaky příznaků Spawn a jejich popisy:

Vlajka Popis
SPAWN_ALIGN_DEFAULT Tento příznak se používá k nastavení výchozího nastavení pro zarovnání.
SPAWN_ALIGN_FAULT Tento příznak se používá pro chybné vyrovnání referencí dat.
SPAWN_ALIGN_NOFAULT Tento příznak se používá k opravě vychýlení poruchy.
SPAWN_DEBUG Tento příznak se používá k ladění jádra.
SPAWN_EXEC SPAWN se pomocí tohoto příznaku chová jako exec * ().
SPAWN_EXPLICIT_CPU Tento příznak se používá k nastavení masky běhu a dědění člena masky = běh masky.
SPAWN_EXPLICIT_SCHED Tento příznak se používá k nastavení zásady plánování.

The <potěr.h> definuje tuto masku SPAWN_ALIGN_MASK slouží k zarovnání výše uvedených příznaků.

pid_t pgroup Podřízená skupina procesů, pokud zadáte SPAWN_SETGROUP v členu vlajky.
int runmask Runmask podřízeného procesu zdědí masky, které jsou dohodnuty na základě hodnoty tohoto člena.
sigset_t sigmask Maska signálu pro podřízený proces, která se používá k určení stavu členů vlajky.
sigset_t sigdefault Sada podřízených procesů výchozích signálů.

Chyby

The posix_spawn () a posix_spawnp () funkce mohou také selhat v některých případech, například:

EINVAL: To je případ, kdy hodnota identifikovaná pomocí file_actions nebo attrp není správné a přiměřené.

Když podkladové volání fork (2), fork (2) nebo clone (2) selže, potěr() funkce vrátí číslo chyby.

ENOSYS: To je případ, pokud funkce a její podpora nejsou zahrnuty nebo poskytovány v systému.

Závěr

Tento výukový program se zabýval základními funkcemi, které poskytuje POSIX_spawn () a funkce, které používá k provádění a provádění svých funkcí. Pokryli jsme také příznaky a chyby, které běžně používá Spawn.

Přidejte gesta myši do Windows 10 pomocí těchto bezplatných nástrojů
V posledních letech se počítače a operační systémy značně vyvinuly. Bývaly doby, kdy uživatelé museli procházet správci souborů pomocí příkazů. Stejně...
Ovládejte a spravujte pohyb myši mezi více monitory ve Windows 10
Správce myší se dvěma displeji umožňuje ovládat a konfigurovat pohyb myši mezi více monitory zpomalením jeho pohybů poblíž hranice. Windows 10/8 vám u...
WinMouse vám umožňuje přizpůsobit a vylepšit pohyb ukazatele myši na PC s Windows
Chcete-li vylepšit výchozí funkce ukazatele myši, použijte freeware WinMouse. Přidává další funkce, které vám pomohou vytěžit ze své skromné ​​myši ma...