2012. 7. 13. 16:25

명령 라인에서 받아 들인 인수에 해당되는 프로그램을 실행 시키는 예제

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

main(int argc, char *argv[])
{
    int i;
    char *arg[argc];
    printf("Running %s with execvp\n", argv[1]);
    /* 명령라인에서 받아들인 인수들을 arg로 복사하는 부분으로
      첫 번째 인수인 a.out은 제외 */
    for (i=0; i<(argc-1); i++) {
       arg[i]= argv[i+1];
    }
    /* 인수가 더 없음을 의미하는 문자 추가 */
    arg[i] = (char *)0;
    /* execvp를 이용해서 'ps -au' 명령어가 실행되도록 하는 부분으로,
      argv[1]에는 'ps'가, arg[0]에는 'ps', arg[1]에는 '-au', 그리고 arg[2]에는 0이 저장 */
    execvp(argv[1], arg);
    printf("execvp failed to run %s\n", argv[1]);
    exit(0);
}

[localhost@locahost]# a.out ps -au

----------------------------------------------------------------------------------------------------
전달 받은 환경변수를 출력하는 프로그램 실행하기

#include <stdio.h>

/* environ에 환경 변수 정보 저장 */
extern char **environ;

main(int argc, char *argv[])
{
    char **env = environ;
    printf("my environment variables are :\n");
    while(*env)
       printf("%s\n", *(env++));
    exit(0);
}

----------------------------------------------------------------------------------------------------
위의 프로그램을 실행되게 하는 프로그램

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

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

main()
{
    char *arg[] = {"23_21", (char *)0};  /* 23_21은 새롭게 실행될 프로그램 이름 */
    printf("Running %s with execve\n", arg[0]);
    /* 23_21에 envp에 설정된 환경 정보를 전달 */
    execve("./23_21", arg, envp);
    printf("execve failed to run %s\n", arg[0]);
    exit(0);
}

Posted by 몰라욧