2012. 7. 13. 16:24

exec계열 함수 하나의 프로세스가 실행되다가 다른 프로세스를 생성하여 실행시키고 자신은 종료시키는 함수

execl계열 함수와 execv계열 함수로 로 분류할 수 있다.

-----------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <unistd.h>

main()
{
    printf("Running ls with execl\n");
    /* 첫 번째 인수가 경로 이름이고 명령라인 인수들을 나열.
      (char *)0은 인수가 더 이상 없음을 의미 */
    execl("/bin/ls", "ls", (char *)0);
    /* 이후 문장은 실행되지 않음 */
    printf("execl failed to run ls\n");
    exit(0);
}

-----------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <unistd.h>

main()
{
    printf("Running ls with execlp\n");
    /* 첫 번째 인수가 파일 이름이고 명령라인 인수들을 나열.
      프로그램 ls는 PATH 환경 변수에 의해 지정된 디렉토리에서 찾음  */
    execlp("ls", "ls", (char *)0);
    /* 이후 문장은 실행되지 않음 */
    printf("execlp failed to run ls\n");
    exit(0);
}

-----------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <unistd.h>

/* 환경 변수를 설정 */
char *envp[] = {"USER=jkim", "PATH=/tmp", (char *)0};

main()
{
    printf("Running ls with execle\n");
    /* 첫 번째 인수가 경로 이름이고 명령라인 인수들을 나열. 환경 변수 넘겨 줌 */
    execle("/bin/ls", "ls", (char *)0, envp);
    /* 이후 문장은 실행되지 않음 */
    printf("execle failed to run ls\n");
    exit(0);
}

-----------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <unistd.h>

main()
{
    /* 인수 리스트를 내용으로 하는 문자열 배열 */
    char *arg[] = {"ls", (char *)0};
    printf("Running ls with execv\n");
    /* 첫 번째 인수가 경로 이름이고 명령라인 인수는 인수들의 배열 */
    execv("/bin/ls", arg);
    printf("execv failed to run ls\n");
    exit(0);
}

-----------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <unistd.h>

main()
{
    char *arg[] = {"ls", (char *)0};
    printf("Running ls with execvp\n");
    /* 첫 번째 인수가 파일 이름이고 명령라인 인수는 인수들의 배열.
      프로그램 ls는 PATH 환경 변수에 의해 지정된 디렉토리에서 찾음 */
    execvp("ls", arg);
    printf("execvp failed to run ls\n");
    exit(0);
}

-----------------------------------------------------------------------------------------------------

#include <stdio.h>
#include <unistd.h>

/* 환경 변수를 설정 */
char *envp[] = {"USER=jkim", "PATH=/tmp", (char *)0};

main()
{
    char *arg[] = {"ls", (char *)0};
    printf("Running ls with execve\n");
    /* 첫 번째 인수가 경로 이름이고 명령라인 인수는 인수들의 배열. 환경 변수 넘겨 줌 */
    execve("/bin/ls", arg, envp);
    printf("execve failed to run ls\n");
    exit(0);
}

-----------------------------------------------------------------------------------------------------

Posted by 몰라욧