2016-10-28 2 views
-1

라고 말하면 하나는 데몬을 작성합니다. 두 가지 옵션을 가지고 있으며, 선택할 수있는 알 수 없습니다 :두 개의 분기가있을 때 하나의 구조체 코드로 분기해야하는 경우

옵션 1 :

int 
main(void) 
{ 
    /* Do something with run_as_daemon variable */ 
    if (run_as_daemon) { 
     pid = fork(); 
     if (pid < 0) 
      err_exit("Could not fork to create daemon"); 
     if (pid > 0) 
      exit(0); /* exit if parent */ 
    } else { 
     do_task(); /* Perform some IO using user commands */ 
    } 
} 

옵션 2 : 나는 그들이 같은 일을 이해

int 
main(void) 
{ 
    if (run_as_daemon) { 
     pid = fork(); 
     if (pid < 0) 
      err_exit("Could not fork to create daemon"); 
     if (pid > 0) 
      exit(0); /* exit if parent */ 
    } 
    do_task(); /* Perform some IO using user commands */ 
} 

하지만, 유지 보수 및 읽기가 더 쉬워 지도록 코드 구조를 개선하는 방법을 알고 싶습니다.

+2

이 두 프로그램이 동일하다는 전제 ("똑같은 일")는 올바르지 않습니다. 두 프로그램간에 차이점이 있습니다. 옵션 1에서'do_task()'는'run_as_daemon'가'false'로 평가 될 때만 호출됩니다. 자식 프로세스는'do_task()'에 대한 호출을 호출하지 않을 것이다. 옵션 2에서'run_as_daemon'이 무엇을 평가하는지에 관계없이'do_task()'가 호출된다. – selbie

+1

개인적으로 첫 번째 옵션을 사용했습니다. 그것은 "독자"가 완전히 관리하고 더 잘 이해할 수 있습니다. – LPs

+0

그 경우'pid == 0'과'exit'도 관리해야합니다. – LPs

답변

1

둘 다이 상황에서 적용 가능합니다. 그러나 첫 번째 옵션은 두 분기 중 하나를 수행 할 수 있고 run_as_demon 인 경우 do_task()로 드롭 다운 할 수 없음을 의미하므로 더보기 쉬운 코드를 내 의견으로 만듭니다. = 0

관련 문제