반응형

먼저 간단한 아래의 예제를 보고 가자.

소스코드 1. execl을 활용한 ls 명령어를 실행해보기

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

int main(int argc, char* argv[])
{
    if (execl("/usr/bin/ls", "ls", "-al", NULL) == -1)
    {
        printf("execve error\n");
        return 1;
    }

    printf("this is ls.\n");
    return 0;
}

 

출력화면

XXXX@DESKTOP-QMGL8TS:~/07practice_c_test$ ./a.out

total 32
drwxr-xr-x  2 gildong gildong 4096 Jun  2 23:57 .
drwxr-xr-x 29 gildong gildong 4096 Jun  2 23:57 ..
-rwxr-xr-x  1 gildong gildong 16736 Jun  2 23:55 a.out
-rw-r--r--  1 gildong gildong 272 Jun  2 23:55 execl.c

 

소스코드 2. execl을 활용해서, 외부 프로그램 실행하기

execl.c

#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>

int main(int argc, char* argv[])
{
    if (execl("./b.out", "./b.out", NULL) == -1)
    {
        printf("execve error\n");
        return 1;
    }

    printf("this is ls.\n");
    return 0;
}

 

print.c

#include <stdio.h>

int main(void)
{
    printf("hello world\n");
    return 0;
}

 

결과화면

# gcc execl.c
# gcc print.c -o b.out
# ./a.out

hello world

 

 

이론

exec를 사용하게 되면, 기존의 exec를 실행시킨 프로세스는 exec가 실행한 프로그램으로 대체가 된다. 그렇기 때문에 exec를 실행시킨 프로세스 ID와 exec로 실행된 프로세스 ID와 같게 된다. 실제 테스트한 출처 -> 링크1

 

execl, execlp 차이점 이해하기 -> 링크2

 

- execl 예제

execl( "/bin/ls", "/bin/ls", NULL);

- execlp 예제 1

execlp( "ls", "ls", NULL);

- execlp 예제 2

 execlp( "ls", "ls", "-al", "/tmp", NULL);

- execve 예제

(인수를 배열화 함, 환경설정가능)

execve( "./a.out", argv, env_pameter);
함수 이름
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[])
int execve (const char *filename, char *const argv [], char *const envp[])

 

 

반응형