exec 함수 가족들...
리눅스 시스템콜 함수중에서 프로세스를 실행시키는
exec 관련 함수들이 많아서 한번 정리해 봤습니다.
(왜 이렇게 많이 만들었는지...)
가족 이름에 돌림자(항렬)을 붙이듯이,
exec도 l, p, e, v 등의 문자를 붙여서 함수명을 만들었는데,
이 문자들의 의미를 따져보니 재미있네요~
#include /unistd.h/
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[]);
int execve (const char *filename,
char *const argv[],
char *const envp[]);
첫째, l은 list를 의미합니다.
둘째, p는 사용자 path(/bin)에서 file을 찾습니다.
세째, e는 environment를 의미합니다.
네째, v는 vector(array)를 의미합니다.
근데, 위의 exec 가족들 모두 시스템 콜은 동일 하다고 하네요.
내부에서 실행되는 것은 동일하지만,
입력으로 전달하는 매개변수는 사용자 환경에 맞게 사용한다는 것인데,
각각의 매개변수를 사용해본 사례들이 있으면 공유해 주시길...
//execl 사용예
int ret;
ret = execl ("/bin/vi", "vi", "/home/kidd/hooks.txt", NULL);
if (ret == -1) perror ("execl");
//execvp 사용예
const char *args[] = { "vi", "/home/kidd/hooks.txt", NULL };
int ret;
ret = execvp ("vi", args);
if (ret == -1) perror ("execvp");
From:
*알지비 (메신저: rgbi3307(at)nate.com)
*학창시절 마이크로마우스를 만들었고, 10년동안 IT관련 개발자로 일하고 있음.
*틈틈히 커널연구회(http://www.kernel.kr/) 내용물들을 만들고 있음.
*((공부해서 남을 주려면 남보다 더많이 연구해야함.))