Linux2008. 12. 8. 16:20

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


The  functions  execlp()  and execvp() will duplicate the actions of the shell in searching for an executable file if
the specified filename does not contain a slash (/) character.  The search path is the path specified in the environ-
ment  by the PATH variable.  If this variable isn’t specified, the default path ‘‘:/bin:/usr/bin’’ is used.  In addi-
tion, certain errors are treated specially.

[출처 : man page]

execl의 경우에는 path가 들어 가는데 arg에서 문제가 생긴다.




execl은 잠시 잊고 잠시 C언어로 돌아가서 main()의 프로토 타입을 생각해보자
 int void(int argc, char **argv)
그리고 argv[0] argv[1]의 내용을 떠올려 보자
argv[0]은 실행한 파일의 이름이 argv[1] 부터 인자가 넘어 오지 않았던가!




다시 execl로 돌아와서
int execl(const char *path, const char *arg, ...);
path에서는 파일 이름이 포함 된 경로를 적어주고, arg[0]에는 파일 이름 arg[1] 부터는 인자를 넘겨 주면 된다.


간단한 예를 들자면
 execl("/bin/ls","ls","-al",0);
로 실행을 하면된다.

마지막의 0은 '\0' == NULL 이다.


[참고 : http://kldp.org/node/1548]
Posted by 구차니