exec 함수군
Language/C 2011. 11. 7. 18:38execv 를 사용하는 프로그램이 있어서 이에 대한 예제 프로그램을 만들어 보았습니다. 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: }
[출처] [리눅스/솔라리스] execv 사용 예제|작성자 까미유
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 |