본문 바로가기
LINUX

excl()과 변종들(execlp(),execv(),execvp(),execle())

by 울라불라오미짱 2021. 10. 8.
반응형

 

 

♥ 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;
}

 

 

반응형