다음을 통해 공유


_exec에 _wexec 함수

이 제품군에 속하는 각 함수 로드 하 고 새 프로세스에서 실행 합니다.

_execl, _wexecl

_execv, _wexecv

_execle, _wexecle

_execve, _wexecve

_execlp, _wexeclp

_execvp, _wexecvp

_execlpe, _wexeclpe

_execvpe, _wexecvpe

변형 함수 이름 끝에 문자를 결정합니다.

_exec 함수 접미사

설명

e

envp을 배열 포인터의 환경 설정, 새 프로세스에 전달 됩니다.

l

명령줄 인수에 개별적으로 전달 된 _exec 함수입니다.새 프로세스에 대 한 매개 변수의 개수를 미리 알고 있는 경우 일반적으로 사용 됩니다.

p

PATH환경 변수를 사용 하 여 실행 파일을 찾을 수 합니다.

v

argv을 배열 포인터의 명령줄 인수에 전달 된 _exec.변수 매개 변수는 새 프로세스에 있을 때 일반적으로 사용 됩니다.

설명

각 _exec 함수 로드 하 고 새 프로세스를 실행 합니다.모든 _exec 함수 사용 하 여 동일한 운영 체제 함수 (CreateProcess)._exec 함수는 자동으로 현재 사용 중인 멀티 바이트 코드 페이지에 따라 멀티 바이트 문자 시퀀스를 인식 합니다. 멀티 바이트 문자 문자열 인수를 적절 하 게 처리 합니다._wexec 함수는의 와이드 문자 버전은 _exec 함수._wexec 함수의 동작을 동일 하 게 자신의 _exec 가족 같은 멀티 바이트 문자 문자열을 처리 하지 않는 것을 제외 하 고.

일반 텍스트 루틴 매핑

Tchar.h 루틴

_UNICODE 및 _mbcs가 정의 되지 않았습니다.

_Mbcs가 정의

_Unicode가 정의

_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 매개 변수는 새 프로세스를 실행 해야 하는 파일을 지정 합니다.이 전체 경로 (루트), (현재 작업 디렉토리에서), 부분 경로 또는 파일 이름을 지정할 수 있습니다.경우 cmdname 파일 이름 확장명이 없는 경우 또는 마침표 (.)로 끝나지 않습니다는 _exec 함수에서 명명 된 파일에 대 한 검색 합니다.검색에 실패 한 경우의 기본 이름은.com 파일 이름 확장명 및.exe,.bat 및.cmd 파일 이름 확장명을 시도 합니다.경우 cmdname 파일 이름 확장명은 해당 확장 검색에 사용 됩니다.경우 cmdname 끝에 마침표를의 _exec 함수에서 검색에 대 한 cmdname 파일 이름 확장명이 없습니다._execlp_execlpe, _execvp, 및 _execvpe 검색 cmdname (동일한 절차를 사용 하 여) 지정 된 디렉터리에 있는 PATH 환경 변수.경우 cmdname (즉, 상대 경로 경우) 드라이브 지정자 또는 모든 슬래시를 포함의 _exec 를 호출 합니다; 지정 된 파일에 대 한 검색 경로 검색 되지 않습니다.

매개 변수 전달에 새 프로세스가 하나 이상의 포인터를 문자열 매개 변수로 제공 하 여 해당 _exec 를 호출 합니다.이러한 문자가 문자열 매개 변수 목록에 대 한 새 프로세스를 형성합니다.상속 된 환경 설정 및 매개 변수 목록에 대 한 새 프로세스를 형성 하는 문자열 조합의 길이가 32 킬로바이트 초과 하지 않아야 합니다.각 문자열에 대 한 종료 null 문자 ('\ 0')을 개수에 포함 되지 않습니다 있지만 공백 문자 (구분 된 매개 변수를 자동으로 삽입) 계산 됩니다.

[!참고]

문자열에 포함 된 공백은 예기치 않은 동작이 발생할 수 있습니다. 예를 들어, 전달 _exec 문자열 "hi there" 두 개의 인수를 가져오는 새 프로세스에서 발생 합니다 "hi" 및 "there".라는 파일을 열고 새 프로세스를 의도 한 경우 "hi 있을", 프로세스를 실패 하 게 됩니다.문자열을 인용 하 여 피할 수 있습니다: "\"hi there\"".

보안 정보보안 정보

사용자 입력을 전달 하지 않습니다 _exec 명시적으로 해당 내용을 확인 하지 않고 있습니다._exec에 대 한 호출 됩니다 오류가 따라서 조건이 지정 되지 않은 경로 이름 인해 잠재적인 보안 문제를 고려 합니다.

_exec 함수 매개 변수의 유효성을 검사 합니다.매개 변수는 null 포인터를 예상 하는 경우 문자열을 빈 또는 생략의 _exec 함수에서 설명 하는 대로 잘못 된 매개 변수 처리기를 호출 매개 변수 유효성 검사.실행을 계속 수 있으면 이러한 함수를 설정 errno 에 EINVAL 및-1을 반환 합니다.새 프로세스가 실행 됩니다.

인수 포인터는 별도 매개 변수로 전달 될 수 있습니다 (에 _execl, _execle, _execlp, 및 _execlpe) 또는 포인터의 배열 (에 _execv, _execve, _execvp, 및 _execvpe).하나 이상의 매개 변수를 arg0, 새 프로세스에 전달 해야 이 매개 변수는 argv[0] 새 프로세스입니다.일반적으로이 매개 변수를 복사본입니다 cmdname.(다른 값에 오류가 생성 되지 않습니다.)

_execl, _execle, _execlp, 및 _execlpe 호출 매개 변수의 수를 미리 알고 있는 경우 일반적으로 사용 됩니다.매개 변수 arg0 일반적으로에 대 한 포인터는 cmdname.매개 변수 arg1 - argn 새 매개 변수 목록을 형성 문자 문자열을 가리킵니다.널 포인터 이어야 합니다. argn 는 매개 변수 목록의 끝을 표시 합니다.

_execv, _execve, _execvp, 및 _execvpe 호출 됩니다 유용한 경우 새 프로세스에 대 한 매개 변수 변수 번호입니다.매개 변수에 대 한 포인터 배열을 이름으로 전달 됩니다 argv.매개 변수 argv[0]은 일반적으로에 대 한 포인터입니다 cmdname.매개 변수 argv[1]를 통해 argvn 새 매개 변수 목록을 형성 문자 문자열을 가리킵니다.매개 변수 argvn+ 1] 되어야 합니다는 NULL 포인터 매개 변수 목록의 끝을 표시 합니다.

파일을 열 경우는 _exec 호출한 새 프로세스에서 열린 상태로 유지 합니다._execl, _execlp, _execv, 및 _execvp 요청을 새 프로세스 호출 프로세스의 환경을 상속 받습니다._execle_execlpe, _execve, 및 _execvpe 호출을 통해 환경 설정의 목록을 전달 하 여 환경의 새 프로세스에 대 한 변경의 envp 매개 변수.envp환경 변수를 정의 하는 (를 제외 하 고 마지막 요소에 대해) 각 요소의 null로 끝나는 문자열을 가리키는 문자 포인터의 배열입니다.일반적으로 이러한 문자열은 폼을 사용 NAME=value 위치 NAME 환경 변수 이름입니다 및 value 변수를 설정 하는 문자열 값입니다.(이때 value 큰따옴표로 묶지 않았습니다.) 마지막 요소는 envp 배열 수 NULL.때 envp 자체가 NULL, 새 프로세스가 호출 하는 프로세스의 환경 설정을 상속 합니다.

중 하나를 실행 하는 프로그램은 _exec 함수 항상 메모리에 로드 프로그램의.exe 파일 헤더의 최대 할당 필드 기본값인 0xffffh로 설정 된 것 처럼.

_exec 호출 변환 모드에서 열린 파일을 유지 하지 않습니다.새 프로세스에 호출 프로세스에서 상속 파일을 사용 해야 하는 경우 사용 하는 _setmode 루틴을 이러한 파일의 번역 모드 원하는 모드를 설정 합니다.명시적으로 flush 합니다 (사용 하 여 fflush 또는 _flushall) 나는 전에 스트림을 닫아야는 _exec 함수를 호출 합니다.호출에 의해 만들어진 새 프로세스에 신호 설정이 유지 되지 않습니다 _exec 루틴입니다.기본값으로 새 프로세스에 다시 신호 설정 됩니다.

예제

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

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에 있는 해당

헤더: process.h

참고 항목

참조

프로세스 및 환경 제어

abort

atexit

exit, _exit

_onexit, _onexit_m

_spawn, _wspawn 함수

system, _wsystem