exec 함수군

Language/C 2011. 11. 7. 18:38

execv 를 사용하는 프로그램이 있어서 이에 대한 예제 프로그램을 만들어 보았습니다. 2번째 포인트 배열의 맨 마지막을 NULL 로 넣어 주어야 하는 점만 주의하시면 될 것 같더군요.

 

01: #include <stdio.h>
02: #include <unistd.h>
03: #include <stdlib.h>
04: #include <errno.h>
05: 
06: int main( int argc, char * argv[] )
07: {
08:   char * pszArg[3];
09: 
10:   pszArg[0] = malloc( 255 );
11:   sprintf( pszArg[0], "/bin/ls" );
12: 
13:   pszArg[1] = malloc( 255 );
14:   sprintf( pszArg[1], "-al" );
15: 
16:   pszArg[2] = NULL;
17: 
18:   if( execv( pszArg[0], pszArg ) == -1 )
19:   {
20:     printf( "%d\n", errno );
21:   }
22: 
23:   return 0;
24: }


exec 함수군은 path나 file에 지정한 명령이나 실행 파일을 실행한다. 이때 arg나 envp로 시작하는 인자를 path나 file에 지정한 파일의 main 함수에 전달한다. 각 함수별로 경로명까지 지정하거나 단순히 실행 파일명만 지정하는 등 차이가 있고 인자를 전달하는 형태에도 차이가 있다.

 

#include<unistd.h>

int execl(const char *path, const char *arg0, ..., const char *argn, (char *)0);

path에 지정한 경로명의 파일을 실행하며 arg0~argn을 인자로 전달한다관례적으로 arg0에는 실행 파일명을 지정한다. execl함수의 마지막 인자로는 인자의 끝을 의미하는 NULL 포인터((char*)0)를 지정해야 한다. path에 지정하는 경로명은 절대 경로나 상대 경로 모두 사용할 수 있다.

int execv(const char *path, char *const argv[]);

path에 지정한 경로명에 있는 파일을 실행하며 argv를 인자로 전달한다. argv는 포인터 배열이다이 배열의 마지막에는 NULL 문자열을 저장해야 한다.

int execle(const char *path, const char *arg0, ..., const char *argn, (char *)0, char*const envp[]);

path에 지정한 경로명의 파일을 실행하며 arg0~argn envp를 인자로 전달한다. envp에는 새로운 환경 변수를 설정할 수 있다. arg0~argn을 포인터로 지정하므로마지막 값은 NULL 포인터로 지정해야 한다. Envp는 포인터 배열이다이 배열의 마지막에는 NULL 문자열을 저장해야 한다.

int execve(const char *path, char *const argv[], char *const envp[]);

path에 지정한 경로명의 파일을 실행하며 argv, envp를 인자로 전달한다. argv envp는 포인터 배열이다이 배열의 마지막에는 NULL 문자열을 저장해야 한다.

int execlp(const char *file, const char *arg0, ..., const char *argn, (char *)0);

file에 지정한 파일을 실행하며 arg0~argn만 인자로 전달한다파일은 이 함수를 호출한 프로세스의 검색 경로(환경 변수 PATH에 정의된 경로)에서 찾는다. arg0~argn은 포인터로 지정한다. execl 함수의 마지막 인자는 NULL 포인터로 지정해야 한다.

int execvp(const char *file, char *const argv[]);

file에 지정한 파일을 실행하며 argv를 인자로 전달한다. argv는 포인터 배열이다이 배열의 마지막에는NULL 문자열을 저장해야 한다.

'Language > C' 카테고리의 다른 글

stat  (0) 2011.11.08
배열 크기 구하기  (0) 2011.11.08
현재 날짜와 시간 출력  (0) 2011.11.04
gettimeofday  (0) 2011.11.04
소켓 정리  (0) 2011.11.02
: