_exec, _wexec funções

Cada função nesta família carrega e executa um novo processo:

_execl, _wexecl

_execv, _wexecv

_execle, _wexecle

_execve, _wexecve

_execlp, _wexeclp

_execvp, _wexecvp

_execlpe, _wexeclpe

_execvpe, _wexecvpe

Letra no participante do nome da função determina a variação.

_exec função sufixo

Descrição

e

envp, matriz de ponteiros para as configurações de ambiente, é passado para o novo processo.

l

Argumentos de linha de comando são passados individualmente para _exec função. Normalmente usada quando o número de parâmetros para o novo processo é conhecido antecipadamente.

p

PATH variável de ambiente é usado para localizar o arquivo para executar.

v

argv, matriz de ponteiros para argumentos de linha de comando, é passado para _exec. Normalmente usada quando o número de parâmetros para o novo processo é variável.

Comentários

Cada _exec função carrega e executa um novo processo. All _exec funções usam a mesma função de sistema operacional. The _exec funções de tratam automaticamente sistema autônomo argumentos de seqüência de caractere multibyte conforme apropriado, reconhecendo seqüências de caractere de multibyte de acordo com para a página de código multibyte atualmente em uso. The _wexec funções são versões de caractere largo do _exec funções. The _wexec funções se comportam de forma idêntica para seus _exec equivalentes da família, exceto pelo fato de que eles não manipulam seqüências de caractere de multibyte.

Mapeamentos de rotina de texto genérica

Rotina tchar.h

_UNICODE e _MBCS não definido

_MBCS definido

_UNICODE definido

_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

Quando uma telefonar para um _exec função for bem-sucedida, o novo processo é colocado na memória ocupada anteriormente pelo processo de telefonar. Memória suficiente deve estar disponível para carregar e executar o novo processo.

The cmdname parâmetro especifica o arquivo a ser executado sistema autônomo o novo processo. Ele pode especificar um caminho completo (de raiz), um caminho parcial (do diretório de trabalho corrente) ou um nome de arquivo.If cmdname não tem uma extensão de nome de arquivo ou não termina com um ponto (.), o _exec função de pesquisa no arquivo nomeado. Se a Pesquisar não obtiver êxito, ele tenta o mesmo nome de base com a extensão de nome de arquivo .com e, em seguida, com o .exe, .bat e .cmd as extensões de nome de arquivo.If cmdname tem uma extensão de nome de arquivo, somente essa extensão é usado na Pesquisar. If cmdname termina com um período, o _exec função de procura cmdname sem extensão de nome de arquivo. _execlp, _execlpe, _execvp, e _execvpe Procurar cmdname (usando os mesmos procedimentos) nos diretórios especificados pela PATH variável de ambiente. If cmdname contém um especificador de unidade ou quaisquer barras (ou seja, se ele é um caminho relativo), o _exec telefonar procura apenas o arquivo especificado; o caminho não é pesquisado.

Parâmetros são passados para o novo processo oferecendo ponteiros de uma ou mais seqüências de caractere sistema autônomo parâmetros no _exec Chame. Esses formulário seqüências de caractere a parâmetro lista para o novo processo.O comprimento combinado das configurações do ambiente herdado e as seqüências de caracteres que formam a lista de parâmetros para o novo processo não deve exceder 32 kilobytes.O caractere nulo de terminação ('\0') para cada seqüência de caracteres não está incluído na contagem, mas caracteres de espaço (inseridos automaticamente para separar os parâmetros) são contadas.

Observação:

Espaços incorporados em seqüências de caracteres podem causar um comportamento inesperado; por exemplo, passando _exec a seqüência de caracteres "hi there" fará com que o novo processo Obtendo dois argumentos: "hi" e "there". Se a intenção era para que o novo processo de em em aberto um arquivo chamado "Olá lá", o processo falhará.Você pode evitar isso citando a seqüência de caracteres: "\"hi there\"".

Observação de segurança:

Não passe a entrada do usuário para _exec sem verificar explicitamente se seu conteúdo. _exec resultará em uma telefonar para CreateProcess assim, tenha em mente esse caminho não qualificado nomes podem levar a vulnerabilidades de segurança potenciais.

In Visual C++ 2005, o _exec funções validar seus parâmetros. Se esperava parâmetros são nulo ponteiros, seqüências de caracteres vazia ou omitido, a _exec funções de chamar o manipulador de parâmetro inválido conforme descrito em Validação de parâmetro. Se a execução for permitida para continuar, essas funções conjunto errno para EINVAL e retornar -1. Nenhum novo processo é executado.

sistema autônomo ponteiros de argumento podem ser passados sistema autônomo parâmetros separados (em _execl, _execle, _execlp, e _execlpe) ou sistema autônomo uma matriz de ponteiros (pol _execv, _execve, _execvp, e _execvpe). Pelo menos um parâmetro, arg0, deve ser passado para o novo processo; esse parâmetro é argv[0] do novo processo. Normalmente, esse parâmetro é uma cópia de cmdname. (Um valor diferente não produz um erro.)

The _execl, _execle, _execlp, e _execlpe chamadas são geralmente usadas quando o número de parâmetros é conhecido antecipadamente. O parâmetro arg0 geralmente é um ponteiro para cmdname. Os parâmetros de arg1 por meio de argn aponte para formar a nova lista de parâmetro de seqüências de caractere. Um ponteiro nulo deve seguir argn para marcar o participante da lista de parâmetro.

The _execv, _execve, _execvp, e _execvpe chamadas são úteis quando o número de parâmetros para o novo processo é variável. Ponteiros para sistema autônomo parâmetros são passados sistema autônomo uma matriz, argv. O parâmetro argv[0] é geralmente um ponteiro para cmdname. The parameters argv[1] through argv[n] point to the character strings forming the new parameter list.The parameter argv[n+1] must be a NULL pointer to mark the end of the parameter list.

Arquivos que estão abertos quando um _exec telefonar é feita a permanecer em aberto no novo processo. In _execl, _execlp, _execv, e _execvp chamadas, o novo processo herda o ambiente do processo de chamada. _execle, _execlpe, _execve, e _execvpe chamadas de alteram o ambiente para o novo processo, passando uma lista das configurações de ambiente por meio do envp parâmetro. envp uma matriz de ponteiros de caractere, cada elemento do qual (exceto para o elemento final) aponta para uma seqüência de caracteres terminada com caractere nulo é definir uma variável de ambiente. Uma seqüência de caracteres geralmente tem a forma NAME=value onde NAME é o nome de uma variável de ambiente e value é o valor de seqüência de caracteres para o qual essa variável está definida. (Observe que value não está entre aspas duplas.) O elemento final do envp a matriz deve ser NULL. Quando envp está NULL, o novo processo herda as configurações de ambiente do processo de chamada.

Um programa executado com um a _exec funções é sempre carregado na memória sistema autônomo se o campo alocação máxima no cabeçalho do arquivo .exe do programa estivesse definido sistema autônomo o valor padrão de 0xFFFFH.

The _exec chamadas não preservam os modos de conversão de arquivos abertos. Se o novo processo deve usar arquivos herdados do processo de chamada, use o _setmode rotina para conjunto o modo de conversão desses arquivos para o modo desejado.Você deve liberar explicitamente (usando fflush ou _flushall) ou qualquer fluxo antes de fechar o _exec telefonar de função. Configurações de sinal não são preservadas em novos processos criados por chamadas para _exec rotinas. As configurações de sinal são redefinidas para padrão no novo processo.

Exemplo

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

executar o programa executar Crt_args.exe seguinte:

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

Equivalente do NET Framework

Consulte também

Referência

Processo e ambiente de controle

anular

atexit

sair, _exit

_onexit, _onexit_m

_spawn, _wspawn funções

sistema, _wsystem