2016-10-28 52 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