Udostępnij za pośrednictwem


_exec, _wexec funkcje

Każda funkcja w tej rodziny ładuje i wykonuje nowego procesu:

_execl, _wexecl

_execv, _wexecv

_execle, _wexecle

_execve, _wexecve

_execlp, _wexeclp

_execvp, _wexecvp

_execlpe, _wexeclpe

_execvpe, _wexecvpe

Litery na końcu nazwy funkcji określa zmiany.

sufiks funkcji _exec

Opis

e

envp, tablicy wskaźników do ustawienia środowiska, jest przekazywany do nowego procesu.

l

Argumenty wiersza polecenia przekazywane są indywidualnie do _exec funkcji.Zazwyczaj używane, gdy liczba parametrów do nowego procesu jest znane z wyprzedzeniem.

p

PATHZmienna środowiskowa jest używany do znalezienia pliku do wykonania.

v

argv, tablicy wskaźników do argumentów wiersza polecenia, jest przekazywany do _exec.Zazwyczaj używane, gdy liczba parametrów do nowego procesu jest zmienna.

Uwagi

Każdy _exec funkcji ładuje i wykonuje nowy proces.Wszystkie _exec funkcji należy użyć tej samej funkcji systemu operacyjnego (CreateProcess)._exec Funkcje obsługi automatycznie argumenty łańcuch znaków wielobajtowych, odpowiednio, uznając sekwencje znaków wielobajtowych, zgodnie z obecnie używanej strony kodowej wielobajtowych._wexec Funkcje są wersje szerokich znaków z _exec funkcji._wexec Funkcji zachowują się identycznie do ich _exec rodziny odpowiedników z wyjątkiem, że nie obsługują ciągi znaków wielobajtowych.

Tekst rodzajowy rutynowych mapowania

Procedura TCHAR.h

_UNICODE i _MBCS nie zdefiniowane

_MBCS, definicja

_UNICODE, definicja

_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 określa plik, które mają być zrealizowane jako nowy proces.Może określać pełną ścieżkę (z katalogu głównego), częściową ścieżkę (z bieżącego katalogu roboczego) lub nazwę pliku.Jeśli cmdname nie ma rozszerzenie nazwy pliku lub nie kończyć się kropką (.), _exec działać wyszukuje plik nazwany.Jeżeli wyszukiwanie jest niepomyślne, podejmie taką samą nazwę z rozszerzeniem nazwy pliku .com, a następnie .exe, .bat i .cmd rozszerzeniami.Jeśli cmdname ma rozszerzenie nazwy pliku, tylko, że rozszerzenie jest używane w wyszukiwaniu.Jeśli cmdname kończy się okres, _exec szuka funkcji cmdname bez rozszerzenia nazwy pliku._execlp, _execlpe, _execvp, i _execvpe wyszukiwania cmdname (przy użyciu tych samych procedur) w katalogach, określonej przez PATH zmiennej środowiskowej.Jeśli cmdname zawiera specyfikator dysku lub jakichkolwiek ukośniki (jeśli jest ścieżką względną), _exec wywołania wyszukiwania tylko dla określonego pliku; Ścieżka nie jest przeszukiwana.

Parametry są przekazywane do nowego procesu poprzez jeden lub więcej wskazówek ciągów znaków jako parametry w _exec wywołania.Tych ciągów znaków tworzą listy parametrów dla nowego procesu.Łączna długość ustawienia dziedziczone środowiska i ciągi znaków tworzących listy parametrów dla nowego procesu nie może przekraczać 32 kilobajty.Kończącego znaku null (\0) dla każdego ciągu nie jest uwzględniane w zliczaniu, ale są liczone znaków spacji (wstawiane automatycznie do oddzielania parametrów).

[!UWAGA]

Spacje osadzone w ciągach znaków mogą powodować nieoczekiwane zachowanie; na przykład, przekazując _exec ciąg "hi there" spowoduje nowy proces uzyskiwania dwa argumenty, "hi" i "there".Jeśli zamiarem było mieć nowy proces otwierania pliku o nazwie "hi tam", proces może się nie powieść.Można tego uniknąć, cytując ciąg: "\"hi there\"".

Uwaga dotycząca zabezpieczeńUwaga dotycząca zabezpieczeń

Nie przekazywać dane wejściowe użytkownika do _exec bez sprawdzania wyraźnie jej zawartości._execspowoduje wywołanie do CreateProcess tak należy pamiętać, że ścieżki niekwalifikowanych nazw może doprowadzić do potencjalnych luk w zabezpieczeniach.

_exec Funkcje sprawdzania poprawności ich parametrów.Jeśli oczekuje parametrów są wskaźniki zerowe, puste ciągi, lub jest pominięty, _exec funkcje wywołania obsługi nieprawidłowy parametr, jak opisano w Sprawdzanie poprawności parametru.Jeśli wykonanie może kontynuować, ustaw te funkcje errno do EINVAL i zwraca –1.Żaden nowy proces jest wykonywany.

Wskaźniki argumentu mogą być przekazywane jako oddzielne parametry (w _execl, _execle, _execlp, i _execlpe) lub w postaci tablicy wskaźników (w _execv, _execve, _execvp, i _execvpe).Co najmniej jeden parametr, arg0, muszą zostać przekazane do nowego procesu; Ten parametr jest argv[0] nowego procesu.Zazwyczaj ten parametr jest kopią cmdname.(Wartości różnych nie produkuje błąd).

_execl, _execle, _execlp, I _execlpe wywołania są zazwyczaj używane, gdy liczba parametrów jest znane z wyprzedzeniem.Parametr arg0 jest zwykle wskaźnik do cmdname.Parametry arg1 przez argn wskaż ciągi znaków tworzących nowe listy parametrów.Wskaźnik null należy wykonać, argn do oznaczania końca listy parametrów.

_execv, _execve, _execvp, I _execvpe wywołania są pomocne, gdy liczba parametrów do nowego procesu jest zmienna.Wskaźniki parametry są przekazywane jako tablica, argv.Parametr argv[0] jest zwykle wskaźnik do cmdname.Parametry argv[1] poprzez argvn wskaż ciągi znaków tworzących nowe listy parametrów.Parametr argvn+ 1] musi być NULL wskaźnik, aby oznaczyć koniec listy parametrów.

Otwórz pliki, które są, gdy _exec wywołanie pozostają otwarte w nowy proces.W _execl, _execlp, _execv, i _execvp rozmowy, nowy proces dziedziczy środowisko procesu wywołującego._execle, _execlpe, _execve, i _execvpe wywołania wpływu na środowisko dla nowego procesu, przekazując listę ustawień środowiska poprzez envp parametru.envpTablica znaków wskaźniki, każdy element (z wyjątkiem za ostatnim elementem) wskazuje ciąg zakończony znakiem null jest Definiowanie zmiennej środowiskowej.Taki ciąg ma zazwyczaj postać NAME=value gdzie NAME jest nazwą zmiennej środowiskowej i value jest wartość ciągu, do którego tego zmienna jest ustawiana.(Należy zauważyć, że value nie jest ujęty w znaki podwójnego cudzysłowu.) Ostatnim elementem envp tablicy powinny być NULL.Gdy envp sobie jest NULL, nowy proces dziedziczy ustawienia środowiska procesu wywołującego.

Program wykonywany z jednym z _exec funkcji jest zawsze ładowany do pamięci, jak gdyby pole Alokacja maksymalna w nagłówku pliku .exe programu zostały ustawione na wartość domyślną z 0xFFFFH.

_exec Wywołania nie zachowuje tryby tłumaczenie otwartych plików.Jeśli nowy proces, należy użyć plików dziedziczone z procesu wywołującego, użyj _setmode procedury, aby ustawić tryb translacji tych plików do pożądanego trybu.Należy jawnie flush (za pomocą fflush lub _flushall) lub zamknąć strumieniem przed _exec wywołania funkcji.Sygnał ustawienia nie są zachowywane w nowych procesów, które są tworzone przez wywołania _exec procedur.Ustawienia sygnał są resetowane do wartości domyślnych w nowy proces.

Przykład

// 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;
}

Uruchom następujący program do wykonywania Crt_args.exe:

// 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 );
}

.NET Framework równoważne

Nagłówek: process.h

Zobacz też

Informacje

Proces i kontroli środowiska

abort

atexit

exit, _exit

_onexit, _onexit_m

_spawn, _wspawn funkcje

System, _wsystem