proc & execl 적용

EEEFFEE·2023년 11월 19일
0

kdt system-project note

목록 보기
1/15

23.11.19 최초 작성

github 링크

1. 크롬 & filebrowser 설치

1. 크롬 설치

  • 링크에 들어가 개발 환경(Debian 계열 리눅스)에 맞는 크롬 패키지를 다운로드 받는다
  • 패키지를 다운 받은 경로에서 해당 패키지를 설치하면

2. filebrowser 설치

  • 크롬을 통해 실행할 프로그램인 filebrowser를 설치한다
  • 다음과 같이 터미널에 입력하면 /home/local/bin 경로에 설치된다 (Debian 계열 리눅스)
curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash filebrowser -r <파일 경로>

2. 코드 작성 내역

  • /main.c : -

  • /system/system_server.c : create_system_server()함수 호출 시 fork()시스템 콜로 자식 프로세스를 생성해 system_server()함수를 작동 시킴

int create_system_server()
{
    pid_t systemPid;
    const char *name = "system_server";

    printf("Creating system_server process \n");

    switch(systemPid = fork()) {
        case -1:
            perror("system_sever process folk failed \n");

        case 0:
            system_server();
            break;
        
        default:
            break;
    }

    return 0;
}

  • /ui/gui.c : create_gui()함수 호출 시 fork()시스템 콜로 자식 프로세스를 생성 후 execl()시스템 콜을 통해 크롬 웹브라우저를 작동 시킴
    (포트 번호 : 8282,

int create_gui()
{
    pid_t systemPid;

    printf("Creating GUI process \n");

    sleep(3);
    
    switch(systemPid = fork()){
        case -1 : 
            perror("GUI process fork failed \n");

            case 0 :
            if(execl("/usr/bin/google-chrome-stable", "google-chrome-stable", "http://localhost:8282", NULL)) {
                perror("GUI process execl failed \n");
            }
            printf("Finish GUI Process\n");
            break;
        default :
            break;
    }
    return 0;
}

  • /ui/input.c : create_input()함수 호출 시 fork()시스템 콜로 자식 프로세스를 생성해 input()함수를 작동 시킴

int create_input()
{
    pid_t systemPid;
    const char *name = "input";

    printf("Creating input process\n");

    switch(systemPid = fork()){
        case -1:
            perror("input process create failed \n");
        
        case 0 :
            input();
            break;

        default :
            break;
    }

    return 0;
}

  • /ui/web_browser.c : create_web_server()함수 호출 시 fork()시스템 콜로 자식 프로세스를 생성 후 execl()시스템 콜을 통해 create_gui()를 통해 작동한 크롬 브라우저 위에서 filebrowser를 작동 시킴

int create_web_server()
{
    pid_t systemPid;

    printf("Creating web_server process\n");

    sleep(5);

    switch(systemPid = fork()){
        case -1 : 
            printf("web_server process fork failed \n");

        case 0 :
            if(execl("/usr/local/bin/filebrowser", "filebrowser", "-p", "8282", (char *) NULL)) {
                perror("web_server process execl failed \n");
            }
            printf("Finish web_server process\n");
            break;
        default :
            break;
    }

    return 0;
}

0개의 댓글

관련 채용 정보