Compartir a través de


_exec, funciones de _wexec

Cada función de esta familia carga y ejecuta un nuevo proceso:

_execl, _wexecl

_execv, _wexecv

_execle, _wexecle

_execve, _wexecve

_execlp, _wexeclp

_execvp, _wexecvp

_execlpe, _wexeclpe

_execvpe, _wexecvpe

La letra al final del nombre de función determina la variación.

sufijo de la función de _exec

Descripción

e

envp, matriz de punteros a la configuración de entorno, se pasa al nuevo proceso.

l

los argumentos de la línea de comandos se pasan individualmente a la función de _exec .Normalmente se utiliza cuando el número de parámetros al nuevo proceso se conoce de antemano.

p

la variable de entornoPATH se utiliza para buscar el archivo para ejecutarse.

v

argv, matriz de punteros a los argumentos de la línea de comandos, se pasa a _exec.Normalmente se utiliza cuando el número de parámetros al nuevo proceso es variable.

Comentarios

cada función de _exec carga y ejecuta un nuevo proceso.Todas las funciones de _exec utilizan la misma función del sistema operativo (CreateProcess).Las funciones de _exec controlan automáticamente argumentos de cadena de caracteres multibyte según corresponda, reconociendo secuencias de caracteres multibyte según la página de códigos multibyte actualmente en uso.Las funciones de _wexec son versiones de caracteres anchos de las funciones de _exec .Las funciones de _wexec se comportan de forma idéntica a sus homólogos de la familia de _exec salvo que no controlan las cadenas de caracteres multibyte.

Asignaciones de la rutina de texto genérico

rutina de Tchar.h

_UNICODE y _MBCS no 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

el parámetro de cmdname especifica el archivo que se ejecutará como el nuevo proceso.Puede especificar una ruta de acceso completa (raíz), una ruta parcial (del directorio de trabajo actual), o un nombre de archivo.Si cmdname no tiene una extensión de nombre de archivo ni la finaliza con un punto (.), las búsquedas de la función de _exec para el archivo con nombre.Si la búsqueda no es correcta, intenta el mismo nombre base con la extensión de nombre de archivo .com y después con extensiones de nombre de archivo .exe, .bat, y .cmd.Si cmdname tiene una extensión de nombre de archivo, sólo esa extensión se usa en la búsqueda.Si finaliza con un punto, las búsquedas de cmdname de la función de _exec para cmdname sin la extensión de nombre de archivo._execlp, _execlpe, _execvp, y búsqueda de _execvpe para cmdname (utilizando los mismos procedimientos) en los directorios especificados por la variable de entorno PATH .Si cmdname contiene un especificador de unidad o las barras diagonales (es decir, si es una ruta de acceso relativa), la llamada de _exec busca únicamente el archivo especificado; la ruta no se busca.

Los parámetros se pasan al nuevo proceso da uno o varios punteros a cadenas de caracteres como los parámetros en la llamada de _exec .Estas cadenas de caracteres forman la lista de parámetros para el nuevo proceso.La longitud combinada de la configuración de entorno heredadas y de las cadenas que forman la lista de parámetros para el nuevo proceso no debe superar 32 kilobytes.El carácter null de terminación (“\ 0 ") para cada cadena no se incluye en el recuento, pero los caracteres de espacio (inserta automáticamente para separar los parámetros) se cuentan.

[!NOTA]

Los espacios insertados en cadenas pueden causar un comportamiento inesperado; por ejemplo, pasar _exec la cadena "hi there" provocará el nuevo proceso que obtiene dos argumentos, "hi" y "there".Si el intento sin tener el nuevo proceso abre un archivo denominado “hello there”, el proceso produciría un error.Puede evitarlo citando string: "\"hi there\"".

Nota de seguridadNota sobre la seguridad

No pase los datos proporcionados por el usuario a _exec sin comprobar explícitamente su contenido._exec dará lugar a una llamada a CreateProcess para que tenga presente que los nombres de ruta de acceso calificada podrían provocar vulnerabilidades de seguridad potenciales.

las funciones de _exec validan sus parámetros.Si los parámetros esperados son punteros nulos, cadenas vacías, u omitido, las funciones de _exec se invoca el controlador no válido del parámetro tal como se describe en Validación de parámetros.Si la ejecución puede continuar, este errno establecido funciones a EINVAL y retorno -1.no se ejecuta ningún nuevo proceso.

Punteros de argumento se pueden pasar como parámetros separados (en _execl, _execle, _execlp, y _execlpe) o como una matriz de punteros (en _execv, _execve, _execvp, y _execvpe).Al menos un parámetro, arg0, se debe pasar al nuevo proceso; este parámetro es argv[0] del nuevo proceso.Normalmente, este parámetro es una copia de cmdname.(Valor diferente de A no genera un error).

_execl, _execle, _execlp, y las llamadas de _execlpe se utilizan normalmente cuando el número de parámetros se conoce de antemano.El parámetro arg0 suele ser un puntero a cmdname.Los parámetros arg1 a través del punto de argn a cadenas de caracteres que forman la nueva lista de parámetros.Un puntero NULL debe seguir argn para marcar el final de la lista de parámetros.

_execv, _execve, _execvp, y las llamadas de _execvpe son útiles cuando el número de parámetros al nuevo proceso es variable.Los punteros a los parámetros se pasan como matriz, argv.El parámetro argv[0] es normalmente puntero a cmdname.Los parámetros argv[1] a través del punto de argv[n] a cadenas de caracteres que forman la nueva lista de parámetros.El parámetro argv[n+1] debe ser un puntero de NULL para marcar el final de la lista de parámetros.

Los archivos que están abiertos cuando se realiza una llamada de _exec permanecen abiertos en el nuevo proceso.En _execl, _execlp, _execv, y las llamadas de _execvp , el nuevo proceso hereda el entorno del proceso de llamada._execle, _execlpe, _execve, y las llamadas de _execvpe modifican el entorno para el nuevo proceso pasando una lista de configuración de entorno con el parámetro de envp .envp es una matriz de punteros de carácter, cada elemento cuyo (salvo el elemento final) señala una cadena terminada en null define una variable de entorno.Esta cadena es normalmente el formulario NAME=value donde es el nombre NAME de una variable de entorno y value es el valor de cadena al que se establece la variable.(Observe que value no están encerrados entre comillas). El último elemento de la matriz de envp debe ser NULL.Cuando envp propio es NULL, el nuevo proceso hereda la configuración del entorno del proceso de llamada.

Un programa ejecutado con una de las funciones de _exec se carga siempre en memoria como si el campo de asignación máxima en el encabezado del archivo .exe de programa fuera establecido en el valor predeterminado de 0xFFFFH.

Las llamadas de _exec no conservan los modos de traducción de archivos abiertos.Si el nuevo proceso debe utilizar los archivos heredados del proceso de llamada, utilice la rutina de _setmode para establecer el de modalidad de traducción de estos archivos el modo deseado.Debe explícitamente vaciar (mediante fflush o _flushall) o cerrar cualquier secuencia antes de la llamada de función _exec .Los valores de la señal no se conservan en los nuevos procesos creados mediante llamadas a las rutinas de _exec .Los valores de la señal se restauran a predeterminado en el nuevo proceso.

Ejemplo

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

Ejecute el programa siguiente para ejecutar 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 );
}

equivalente de .NET Framework

encabezado: process.h

Vea también

Referencia

Proceso y control ambiental

abort

atexit

exit, _exit

_onexit, _onexit_m

_spawn, funciones de _wspawn

system, _wsystem