2016-10-28 57 views
-1

说,我写一个守护进程。 有两个选项,不知道该选择:一个结构代码应该如何在有两个分支时分支到

OPTION 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 */ 
    } 
} 

OPTION 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中,只有'run_as_daemon'评估为'false'时才会调用'do_task()'。子进程不会调用对'do_task()'的调用。在选项2中,无论“run_as_daemon”的计算结果如何,都会调用do_task()。 – selbie

+1

我个人用过第一个选项。它是完全管理的,更容易被“读者”理解。 – LPs

+0

你应该管理'PID == 0'和'exit'那种情况下,使相当于 – LPs

回答

1

两者都适用于这种情况,但是第一个选项在我看来创建了更多可读代码,因为您暗示可以采用任一分支,并且如果run_as_demon不可能下降到do_task()! = 0