글
■ 개념
exec의 모든 변종들은 동일한 기능을 수행한다.
즉, 호출 프로세스의 기억 공간에 새로운 프로그램을 적재함으로써, 호출 프로세스를 변형 시킨다.
exec가 성공적으로 수행되면 호출 프로그램은 완전히 새로운 프로그램으로 대치되고, 이어 그 프로그램의 처음부터
수행이 시작된다.
그 결과는 새로운 프로세스로 간주할 수 있지만, 이 프로세스는 자기를 호출한 프로세스의 식별번호를 그대로 유지한다.
exec 계열에 속한 구성원들의 주 차이점은 인수가 전달되는 방법에 있다.
exec함수는 fork()로 child 프로세스를 만든 후 그 프로세스를 새로운 독립적인 프로세스로 만들어주는 역할을 한다.
따라서 그것은 우리가 명령프롬프트에 실행파일을 실행하는 것과 비슷한 이치이다.
■ execv
int execv(const char *path, char *const argv[]);
fork()를 통해 생성된 child 프로세스의 코드안에 2개의 인수만을 가진다.
첫번째인자는 수행될 프로그램의 경로이름을 가지고 있는 문자열을 가리키는 포인터이고,
두번째인자는 스트링의 배열이다. 이 배열의 첫번째 요소는 수행될 프로그램의 이름을 가리킨다.
배열의 나머지 요소들은 프로그램에 대한 가능한 나머지 인수들을 가리키는데, 인수의 숫자가 일정하지 않으므로,
항상 null 포인터로 끝나야 한다.
ex) char *argv[] = {/경로/gcc, -c, test.c};
execv(argv[0], argv);
■ execl
int execl(const char *path, const char *arg0, ... , const char *argn, NULL);
exec계열 함수들은 현재의 프로세스 이미지를 새로운 프로세스 이미지로 덮어쓴다.
새로운 프로세스의 이미지는 실행 파일을 실행해서 얻는다. 그러므로 이들 함수는 공통적으로 실행할 파일의 경로정보를
가진다.
execl(), execlp(), execle() 함수는 매개 변수 arg0, arg1, ..., argn 을 가진다. 이 매개 변수는 프로그램의 실행인자로
넘어간다. 더이상 매개변수가 없을 때는 반드시 NULL을 매개 변수로 지정해야 한다. 첫번째 매개 변수는 경로를 포함한
실행파일의 이름이다.
execv()와 execvp 함수는 마지막 원소가 NULL을 가리키는 배열로 프로그램 실행인자를 넘긴다.
첫번째 매개 변수는 경로를 포함한 실행 프로그램의 이름이다. 배열의 마지막 원소는 반드시 NULL이어야 한다.
execle()함수는 실행 프로그램 이름과 실행인자외에 환경변수도 넘길 수 있다. 환경 변수 값은 배열로 넘어간다.
배열의 마지막은 반드시 NULL이어야 한다.
반환값
execl 함수는 보통 return 을 하지 않는다.
만약 return을 한다면 에러가 일어난 경우로 -1 을 넘겨준다.
'P rogramming > C Language' 카테고리의 다른 글
Malloc(동적 메모리 할당) vs Array(배열) (0) | 2011.06.01 |
---|---|
전처리기 (0) | 2011.04.19 |
바이트 순서 변환 함수 (ntohl, ntohs, htonl, htons) (0) | 2011.04.13 |
fork() - 프로세스 생성 (1) | 2011.03.28 |
SDL Function (0) | 2011.03.24 |
RECENT COMMENT