반응형
♥ excl(),execlp(),execv(),execvp(),execle() 의 공통 역할
- Execute the program designated by path or filename.
- 주어진 path 와 파일 이름으로 프로그램을 overwrite 하며 실행시킨다(?)
♥
#include <unistd.h>
extern char **environ;
int execl ( const char *path, const char *arg, ... , (char *) NULL);
//→ full path 필요
int execlp(const char *filename, const char *arg, ... ,(char *) NULL);
//→ full path 필요 X
int execle(const char *path, const char *arg, ... , (char *) NULL, char *const argv[]);
int execv(const char *path, char *const argv[]);
int execvp(const char *filename, char *const argv[]);
int execvpe(const char *filename, char *const argv[], char *const argv[]);
첫번째 파라미터 const char *path 는 실행할 프로그램의 경로를 말한다.
만약 함수명 끝에 ‘p’가 붙으면 (execlp(),execvp(),execvpe()) 환경 변수 PATH에 있는 명령인지 확인하므로 이럴 때는 경로를 전달하지 않고 파일명만 전달할 수 있다!
그리고 함수명에 ‘l’이 있을 때는 명령행 인자를 순차적으로 전달하며 마지막 전달할 명령행 인자 뒤에 0 (NULL) 을 추가로 전달하여 더 이상 명령행 인자가 없다고 알려준다.
그리고 ‘v’가 있을 때는 명령행 인자를 벡터(char *argv[])로 전달합니다.
그리고 ‘e’가 있을 때는 환경 변수를 전달합니다.
똑똑하신 분이 써놓으신걸 가져와서 내가 이해하기 쉽게 간단히 써봤다. 함수명에 이렇게 많은 뜻이 담겨져 있는 줄 몰랐당.. ㅇㅅㅇ
(참조 : http://ehpub.co.kr/tag/execl/, 링크에 가면 더 정확하고 멋지게 설명을 해주셨다.)
♥ 간단 사용법
#include <unistd.h>
extern char **environ;
execl("/bin/ls","ls","-l",(char *)0); // full path
execlp("ls","ls","-l",(char *)0); // not a full path
char *argv[] = {"ls","-l",(char *)0};
execv("/bin/ls",argv);
execvp("ls",argv);
execle("/bin/ls","ls","-l",(char *)0,environ);
♥ fork()함수와 execlp()를 함께 사용한 예제
#include <stdio.h>
#include <unistd.h>
int main()
{
pid_t = fork();
pid = fork();
if (pid==0)
execlp("ls","ls","-l","/",(char *)0);
else if (pid >0)
printf("I'm parent\n");
else
{
printf("fork error\n");
return(-1);
}
return 0;
}
반응형