Sdílet prostřednictvím


_spawn funkce _wspawn

Každý _spawn funkce vytvoří a spustí nový proces:

_spawnl _wspawnl

_spawnv _wspawnv

_spawnle _wspawnle

_spawnve _wspawnve

_spawnlp _wspawnlp

_spawnvp _wspawnvp

_spawnlpe _wspawnlpe

_spawnvpe _wspawnvpe

Písmena na konci názvu funkce zjistit odchylky.

  • e
    envp, pole ukazatelů nastavení prostředí je předán nový proces.

  • l
    Argumenty příkazového řádku jsou předána jednotlivě na _spawn funkce.Tato přípona je používána počet parametrů na nový proces je předem známo.

  • p
    PATHproměnné prostředí lze najít soubor spustit.

  • v
    argv, pole ukazatelů argumenty příkazového řádku, je předána _spawn funkce.Tato přípona je používána počet parametrů na nový proces je proměnná.

Poznámky

_spawn Funkce každého vytvořit a spustit nový proces.Jsou automaticky zpracovat řetězec vícebajtových znaků argumenty případně UZNÁVAJÍCE vícebajtové znakové sekvence podle vícebajtové znakové stránky právě používán._wspawn Jsou funkce verze celého znaku _spawn funkce; neukládají vícebajtové znakové řetězce.Jinak _wspawn funkce chovají identicky na jejich _spawn protějšky.

Obecný Text rutinní mapování

Rutina Tchar.h

_UNICODE a _MBCS není definován

_MBCS, definice

_UNICODE, definice

_tspawnl

_spawnl

_spawnl

_wspawnl

_tspawnle

_spawnle

_spawnle

_wspawnle

_tspawnlp

_spawnlp

_spawnlp

_wspawnlp

_tspawnlpe

_spawnlpe

_spawnlpe

_wspawnlpe

_tspawnv

_spawnv

_spawnv

_wspawnv

_tspawnve

_spawnve

_spawnve

_wspawnve

_tspawnvp

_spawnvp

_spawnvp

_wspawnvp

_tspawnvpe

_spawnvpe

_spawnvpe

_wspawnvpe

Nedostatek paměti musí být k dispozici pro načtení a spuštění nového procesu.mode Argument určuje akci, kterou volající proces před a během _spawn.Následující hodnoty mode jsou definovány v Process.h:

  • _P_OVERLAY
    Překrytí a volací zpracovat nový proces, zničení volající proces (stejné jako efektu _exec volání).

  • _P_WAIT
    Volající vlákno pozastaví, dokud nebude spuštění nového procesu (synchronní _spawn).

  • _P_NOWAITnebo _P_NOWAITO
    Bude pokračovat v provádění volající proces souběžně s nový proces (asynchronní _spawn).

  • _P_DETACH
    Bude pokračovat v provádění volající proces; nový proces je spuštěn na pozadí bez přístupu do konzoly nebo klávesnice.Volání do _cwait proti nový proces nezdaří (asynchronní _spawn).

cmdname Argument určuje soubor, který je spuštěn jako nový proces a můžete zadat úplnou cestu (z kořenového adresáře), částečnou cestu (z aktuální pracovní adresář) nebo pouze název souboru.Pokud cmdname nemá příponu názvu souboru nebo na konci tečku (.) _spawn funkce se nejprve pokusí .com příponu názvu souboru a potom příponou EXE, přípona BAT a nakonec přípony souboru Cmd..

Pokud cmdname má příponu názvu souboru, pouze že slouží k rozšíření.Pokud cmdname končí období, _spawn volání hledá cmdname žádný soubor s příponou._spawnlp, _spawnlpe, _spawnvp, A _spawnvpe funkce vyhledávání cmdname (pomocí stejných postupů) v adresářích určených PATH proměnné prostředí.

Pokud cmdname obsahuje specifikátor jednotky nebo jakékoli lomítka (Pokud je relativní cesty), _spawn volání hledá pouze zadaný soubor; v žádné cestu hledání.

V minulosti, některé z těchto funkcí sady errno na nulu při úspěchu; aktuální chování je ponechat errno untouched na úspěch podle standardní C.Pokud potřebujete emulovat staré chování, errno na nulu, těsně před voláním těchto funkcí.

[!POZNÁMKA]

Chcete-li zajistit správné překrytí inicializace a ukončení, nepoužívejte setjmp nebo longjmp funkce nebo ponechat proceduru překrytí.

Argumenty pro vytvářený proces

Chcete-li předat argumenty nový proces, dejte jednoho nebo více ukazatelů znakových řetězců jako argumenty v _spawn volání.Tyto řetězce znaků formulář Seznam argumentů pro vytvářený proces.Celková délka řetězců tvořících seznam argumentů pro nový proces nesmí být vyšší než 1024 bajtů.Ukončujícím znakem null (\0) pro každý řetězec není v počtu zahrnuty, ale jsou zahrnuty znaky (automaticky vložen do samostatných argumenty).

[!POZNÁMKA]

Mezery vložené řetězce může způsobit neočekávané chování; například předávání _spawn řetězec "hi there" výsledkem bude nový proces získávání dva argumenty "hi" a "there".Pokud bylo záměrem mít nový proces, otevřete soubor s názvem "hi tam", by nezdaří.Tomu lze zabránit odkázali řetězec: "\"hi there\"".

Poznámka k zabezpečeníPoznámka k zabezpečení

Nepředá vstup uživatele na _spawn bez explicitně kontroly jeho obsahu._spawnVýsledkem bude volání CreateProcess tak mějte na paměti cestu neúplných názvů může vést k možnými chybami zabezpečení.

Můžete předat argument ukazatele jako samostatné argumenty (v _spawnl, _spawnle, _spawnlp, a _spawnlpe) nebo jako matici ukazatele (v _spawnv, _spawnve, _spawnvp, a _spawnvpe).Musí projít alespoň jeden argument arg0 nebo argv[0] vytvářený proces.Úmluva je tento argument název programu, zadejte na příkazovém řádku.Jiné hodnoty nevytvářejí chybu.

_spawnl, _spawnle, _spawnlp, A _spawnlpe volání se obvykle používají v případech, kde počet argumentů je předem známo.arg0 Argument je obvykle ukazatel na cmdname.Argumenty arg1 prostřednictvím argn jsou odkazy na řetězce znaků tvořící nový seznam argumentů.Po argn, musí být NULL ukazatel na konec seznamu argumentů.

_spawnv, _spawnve, _spawnvp, A _spawnvpe volání jsou užitečné, když je proměnná počet argumentů procesu.Ukazatele na argumenty jsou předány jako matice, argv*.* Argument argv[0] je obvykle ukazatel na cestu v reálném režimu nebo na název programu v chráněném režimu a argv[1] prostřednictvím argvn jsou odkazy na řetězce znaků tvořící nový seznam argumentů.Argument argvn + 1] musí být NULL ukazatel na konec seznamu argumentů.

Prostředí proces

Otevřít soubory, které jsou, pokud _spawn hovoru zůstávají otevřené v novém procesu.V _spawnl, _spawnlp, _spawnv, a _spawnvp volání nový proces zdědí prostředí volajícího procesu.Můžete použít _spawnle, _spawnlpe, _spawnve, a _spawnvpe změnit prostředí pro nový proces předáním seznam nastavení prostředí prostřednictvím volání envp argument.Argument envp je pole ukazatelů znak každého prvku (s výjimkou poslední prvek), které odkazuje na řetězec zakončený definování proměnné prostředí.Tyto řetězce obvykle má tvar NAME=value kde NAME je název proměnné prostředí a value je hodnota řetězce, které tato proměnná nastavena.(Všimněte si, že value není uzavřena v uvozovkách.) Poslední prvek envp pole by měla být NULL.Při envp je NULL, vytvářený proces zdědí nastavení prostředí nadřazeného procesu.

_spawn Funkce můžete předat všechny informace o otevřených souborech, včetně režim překladu na nový proces.Tyto informace jsou předány v reálném režimu prostřednictvím C_FILE_INFO položku v prostředí.Spouštěcí kód obvykle zpracovává tuto položku a pak odstraní z prostředí.Pokud _spawn funkce založí proces-C, zůstává tato položka v prostředí.Tisk prostředí zobrazí grafické znaky v řetězci definici pro tuto položku, protože prostředí informace předány v binárním formátu v reálném režimu.By neměly mít vliv na běžné operace.V chráněném režimu informace o prostředí je předán v textové podobě a proto neobsahuje žádné znaky grafiky.

Explicitně flush (pomocí fflush nebo _flushall) nebo zavřít všechny proudu před voláním _spawn funkce.

Nové procesy vytvořené voláním _spawn rutiny nezachová nastavení signálu.Vytvářený proces, obnoví výchozí nastavení signálu.

Přesměrování výstupu

Při volání _spawn z knihovny DLL nebo grafického uživatelského rozhraní aplikace a chcete přesměrovat výstup do kanálu, máte dvě možnosti:

  • Pomocí rozhraní API Win32 kanál, potom volat AllocConsole, nastavte hodnoty popisovač struktury spuštění a volání CreateProcess.

  • Volání _popen _wpopen kterou bude kanál a vyvolat pomocí aplikace cmd.exe /c (nebo command.exe /c).

Příklad

// crt_spawn.c
// This program accepts a number in the range
// 1-8 from the command line. Based on the number it receives,
// it executes one of the eight different procedures that
// spawn the process named child. For some of these procedures,
// the CHILD.EXE file must be in the same directory; for
// others, it only has to be in the same path.
//

#include <stdio.h>
#include <process.h>

char *my_env[] =
{
   "THIS=environment will be",
   "PASSED=to child.exe by the",
   "_SPAWNLE=and",
   "_SPAWNLPE=and",
   "_SPAWNVE=and",
   "_SPAWNVPE=functions",
   NULL
};

int main( int argc, char *argv[] )
{
   char *args[4];

   // Set up parameters to be sent: 
   args[0] = "child";
   args[1] = "spawn??";
   args[2] = "two";
   args[3] = NULL;

   if (argc <= 2)
   {
      printf( "SYNTAX: SPAWN <1-8> <childprogram>\n" );
      exit( 1 );
   }

   switch (argv[1][0])   // Based on first letter of argument 
   {
   case '1':
      _spawnl( _P_WAIT, argv[2], argv[2], "_spawnl", "two", NULL );
      break;
   case '2':
      _spawnle( _P_WAIT, argv[2], argv[2], "_spawnle", "two", 
               NULL, my_env );
      break;
   case '3':
      _spawnlp( _P_WAIT, argv[2], argv[2], "_spawnlp", "two", NULL );
      break;
   case '4':
      _spawnlpe( _P_WAIT, argv[2], argv[2], "_spawnlpe", "two", 
                NULL, my_env );
      break;
   case '5':
      _spawnv( _P_OVERLAY, argv[2], args );
      break;
   case '6':
      _spawnve( _P_OVERLAY, argv[2], args, my_env );
      break;
   case '7':
      _spawnvp( _P_OVERLAY, argv[2], args );
      break;
   case '8':
      _spawnvpe( _P_OVERLAY, argv[2], args, my_env );
      break;
   default:
      printf( "SYNTAX: SPAWN <1-8> <childprogram>\n" );
      exit( 1 );
   }
   printf( "from SPAWN!\n" );
}
  

Viz také

Referenční dokumentace

Proces a řízení prostředí

abort

atexit

_exec funkce _wexec

exit, _exit

_flushall

_getmbcp

_onexit _onexit_m

_setmbcp

system, _wsystem