Sdílet prostřednictvím


_exec funkce _wexec

Každá funkce této řady načte a spustí nový proces:

_execl _wexecl

_execv _wexecv

_execle _wexecle

_execve _wexecve

_execlp _wexeclp

_execvp _wexecvp

_execlpe _wexeclpe

_execvpe _wexecvpe

Písmeno na konci názvu funkce Určuje změnu.

přípona _exec funkce

Description

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 _exec funkce.Obvykle se používá, pokud počet parametrů procesu 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 _exec.Obvykle se používá při počet parametrů procesu je proměnná.

Poznámky

Každý _exec funkce načte a spustí nový proces.Všechny _exec funkce používají stejnou funkci operačního systému (CreateProcess)._exec Funkce 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._wexec Jsou funkce verze celého znaku _exec funkcí._wexec Funkce chovají identicky na jejich _exec řady protějšky, zpracovávají vícebajtové znakové řetězce.

Obecný Text rutinní mapování

Rutina Tchar.h

_UNICODE a _MBCS není definován

_MBCS, definice

_UNICODE, definice

_texecl

_execl

_execl

_wexecl

_texecle

_execle

_execle

_wexecle

_texeclp

_execlp

_execlp

_wexeclp

_texeclpe

_execlpe

_execlpe

_wexeclpe

_texecv

_execv

_execv

_wexecv

_texecve

_execve

_execve

_wexecve

_texecvp

_execvp

_execvp

_wexecvp

_texecvpe

_execvpe

_execvpe

_wexecvpe

cmdname Parametr určuje soubor, který má být spuštěn jako nový proces.Můžete určit, úplnou cestu (z kořenového adresáře), částečnou cestu (z aktuální pracovní adresář) nebo název souboru.Pokud cmdname nemá příponu názvu souboru nebo na konci tečku (.) _exec funkce vyhledá v souboru s názvem.Pokud je hledání neúspěšné, pokusí se stejným základním názvem s příponou .com a s exe, BAT a CMD bez přípony.Pokud cmdname má příponu názvu souboru se používá pouze rozšíření v hledání.Pokud cmdname končí období, _exec vyhledá funkce cmdname žádný soubor s příponou._execlp, _execlpe, _execvp, a _execvpe Hledat 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), _exec volání hledá pouze zadaný soubor; cesta není prohledána.

Parametry jsou předány nový proces přiřazením jednoho nebo více ukazatelů jako parametry ve znakových řetězců _exec volání.Tyto řetězce znaků formulář seznamu parametrů pro nový proces.Celková délka prostředí zděděné nastavení a řetězců tvořících seznam parametrů pro nový proces nesmí být větší než 32 kB.Ukončujícím znakem null (\0) pro každý řetězec není v počtu zahrnuty, ale jsou počítány znaky (automaticky vložen do samostatných parametry).

[!POZNÁMKA]

Mezery vložené řetězce může způsobit neočekávané chování; například předávání _exec ř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 _exec bez explicitně kontroly jeho obsahu._execVý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í.

_exec Funkce ověřit jejich parametrů.Pokud jsou parametry ukazatele s hodnotou null, prázdné řetězce nebo vynechán, _exec funkce vyvolat obslužnou rutinu neplatný parametr, jak je popsáno v Ověření parametrů.Pokud je povoleno spuštění pokračovat, nastavit tyto funkce errno na EINVAL a vrátí -1.Žádný nový proces je spuštěn.

Argument ukazatele mohou být předány jako samostatné parametry (v _execl, _execle, _execlp, a _execlpe) nebo jako matici ukazatele (v _execv, _execve, _execvp, a _execvpe).Nejméně jeden parametr arg0, musí být předány do nového procesu; Tento parametr je argv[0] nový proces.Tento parametr je obvykle kopie cmdname.(Jinou hodnotu nevytvářejí chybě.)

_execl, _execle, _execlp, A _execlpe volání se obvykle používají, pokud počet parametrů je předem známo.Parametr arg0 je obvykle ukazatel na cmdname.Parametry arg1 prostřednictvím argn příkaz tvořící nový parametr seznam řetězců znaků.Musí následovat ukazatel s hodnotou null argn na konec seznamu parametrů.

_execv, _execve, _execvp, A _execvpe volání jsou užitečná, když počet parametrů procesu je proměnná.Ukazatele na parametry jsou předány jako matice, argv.Parametr argv[0] je obvykle ukazatel na cmdname.Parametry argv[1] prostřednictvím argvn příkaz tvořící nový parametr seznam řetězců znaků.Parametr argvn+ 1] musí být NULL ukazatel na konec seznamu parametrů.

Otevřít soubory, které jsou, kdy _exec hovoru zůstávají otevřené v novém procesu.V _execl, _execlp, _execv, a _execvp volání nový proces zdědí prostředí volajícího procesu._execle, _execlpe, _execve, a _execvpe volání změnit prostředí pro nový proces předáním seznam nastavení prostředí až envp parametr.envpKaždý prvek, jehož (kromě pro poslední prvek) odkazuje na řetězec zakončený pole znak ukazatele definuje 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, nový proces zdědí nastavení prostředí volajícího procesu.

Program provedeny s jedním z _exec funkce vždy načten do paměti, jako by byla maximální přidělení pole v záhlaví souboru EXE programu nastavena na výchozí hodnotu 0xFFFFH.

_exec Volání nezachovávají režimy překlad otevřených souborů.Pokud nový proces musí zděděné z volající proces soubory, použijte _setmode rutina požadovaný režim nastavení režimu převodu těchto souborů.Explicitně flush (pomocí fflush nebo _flushall) nebo zavřít všechny proudu před _exec volání funkce.Není zachováno nastavení signálu v nové procesy, které jsou vytvořeny volání na _exec rutiny.Nastavení signálu se obnovit výchozí v novém procesu.

Příklad

// crt_args.c
// Illustrates the following variables used for accessing
// command-line arguments and environment variables:
// argc  argv  envp
// This program will be executed by crt_exec which follows.


#include <stdio.h>

int main( int argc,  // Number of strings in array argv
 char *argv[],       // Array of command-line argument strings
 char **envp )       // Array of environment variable strings
{
    int count;

    // Display each command-line argument.
    printf( "\nCommand-line arguments:\n" );
    for( count = 0; count < argc; count++ )
        printf( "  argv[%d]   %s\n", count, argv[count] );

    // Display each environment variable. 
    printf( "\nEnvironment variables:\n" );
    while( *envp != NULL )
        printf( "  %s\n", *(envp++) );

    return;
}

Spusťte Crt_args.exe spustit následující program:

// crt_exec.c
// Illustrates the different versions of exec, including
//      _execl          _execle          _execlp          _execlpe
//      _execv          _execve          _execvp          _execvpe
//
// Although CRT_EXEC.C can exec any program, you can verify how 
// different versions handle arguments and environment by 
// compiling and specifying the sample program CRT_ARGS.C. See 
// "_spawn, _wspawn Functions" for examples of the similar spawn 
// functions.


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

char *my_env[] =     // Environment for exec?e
{
   "THIS=environment will be",
   "PASSED=to new process by",
   "the EXEC=functions",
   NULL
};

int main( int ac, char* av[] )
{
   char *args[4];
   int ch;
   if( ac != 3 ){
      fprintf( stderr, "Usage: %s <program> <number (1-8)>\n", av[0] );
      return;
   }

   // Arguments for _execv? 
   args[0] = av[1];
   args[1] = "exec??";
   args[2] = "two";
   args[3] = NULL;

   switch( atoi( av[2] ) )
   {
   case 1:
      _execl( av[1], av[1], "_execl", "two", NULL );
      break;
   case 2:
      _execle( av[1], av[1], "_execle", "two", NULL, my_env );
      break;
   case 3:
      _execlp( av[1], av[1], "_execlp", "two", NULL );
      break;
   case 4:
      _execlpe( av[1], av[1], "_execlpe", "two", NULL, my_env );
      break;
   case 5:
      _execv( av[1], args );
      break;
   case 6:
      _execve( av[1], args, my_env );
      break;
   case 7:
      _execvp( av[1], args );
      break;
   case 8:
      _execvpe( av[1], args, my_env );
      break;
   default:
      break;
   }

   // This point is reached only if exec fails. 
   printf( "\nProcess was not execed." );
   exit( 0 );
}

.Ekvivalent rozhraní.

Záhlaví: process.h

Viz také

Referenční dokumentace

Proces a řízení prostředí

abort

atexit

exit, _exit

_onexit _onexit_m

_spawn funkce _wspawn

system, _wsystem