Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

exec

프로그램을 실행한다.

사용법

#include <unistd.h>
extern char **environ;

int execl(const char *path, const char *arg, ...);
int execlp(const char *file, const char *arg, ...);
int execle(const char *path, const char *arg,
                  ..., char * const envp[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
22

설명

exec계열 함수들은 현재의 프로세스 이미지를 새로운 프로세스 이미지로 덮어쓴다.

새로운 프로세스의 이미지는 실행 파일을 실행해서 얻는다. 그러므로 이들 함수는 공통적으로 실행할 파일의 경로정보를 가진다.

execl(), execlp(), execle() 함수는 매개 변수 arg0, arg1, ..., argn 을 가진다. 이 매개 변수는 프로그램의 실행인자로 넘어간다. 더 이상 매개변수가 없을 때는 반드시 NULL을 매개 변수로 지정해야 한다. 첫번째 매개 변수는 경로를 포함한 실행파일의 이름이다.

execv()와 execvp 함수는 마지막 원소가 NULL을 가리키는 배열로 프로그램 실행인자를 넘긴다. 첫번째 매개 변수는 경로를 포함한 실행 프로그램의 이름이다. 배열의 마지막 원소는 반드시 NULL이어야 한다.

execle()함수는 실행 프로그램 이름과 실행인자외에 환경변수(:12)도 넘길 수 있다. 환경 변수 값은 배열로 넘어간다. 배열의 마지막은 반드시 NULL이어야 한다.

반환 값

execl 함수는 보통 return 을 하지 않는다. 만약 return을 한다면 에러가 일어난 경우로 -1 을 넘겨준다.

예제

execl함수로 쉘 프로그램 실행
#include <unistd.h>

int main()
{
    execl("/bin/sh", "/bin/sh", NULL);
}

execle함수로 환경변수도 함께 넘김
#include <unistd.h>
#include <string.h>

int main(int argc, char **argv)
{
    char *env[]={"MYHOME=seoul", "MYTEST=1234", (char *)0};

    execle("/bin/sh", "sh", NULL, env);
    perror();
}
쉘 실행 후 env명령으로 MYHOME, MYTEST 값을 확인할 수 있다.