[LINUX] execl

CS/Linux 2011. 3. 14. 15:50
참고 : 
Man pages for execl, getenv


#include <unistd.h>

extern char **environ;

int execl (const char *path, const char *arg0, ... /*, (char *)0 */);
int execle(const char *path, const char *arg0, ... /*, (char *)0, char *const envp[] */);
int execlp(const char *file, const char *arg0, ... /*, (char *)0 */);

int execv (const char *path, char *const argv[]);
int execvp(const char *file, char *const argv[]);
int execve(const char *path, char *const argv[], char *const envp[]);
int execvP(const char *file, const char *search_path, char *const argv[]);

만약 exec()계열의 함수가 리턴을 한다면, 에러가 발생한 것이다. 이 때 리턴 값은 -1 이고 errno변수값이 설정된다.

execlp(), execvp() 함수는 PATH환경변수에 지정된 패스에서 file을 찾는다. 
만약 이 변수가 지정되지 않았다면, <paths.h>에 지정되어 있는 _PATH_DEFPATH 에 따라 지정된다.(일반사용자- /usr/bin:/bin)
execvP()는 탐색 경로를 인자에 지정한다.

char *const envp[] = {"SOMEKEY1=somevalue1", "SOMEKEY2=somevalue2", NULL};
char * const argv[] = {"/usr/bin/uname", "-a", NULL};

execl ("/usr/bin/uname",      "/usr/bin/uname",      "-a", NULL);
execle("/path/to/executable", "/path/to/executable",       NULL, envp);
execlp("uname",               "uname",               "-a", NULL);

execv ("/usr/bin/uname",    argv);
execvp("uname",             argv);
execve("/usr/bin/uname",    argv, envp);
evecvP("uname", "/usr/bin", argv);








: