[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);