-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 */
}
據我所知,他們做同樣的事情,但想知道更好地構造代碼以便更易於維護和閱讀。
你的前提下,這兩個方案是等價的(「做同樣的事情」)不正確。這兩個程序之間有區別。在選項1中,只有'run_as_daemon'評估爲'false'時纔會調用'do_task()'。子進程不會調用對'do_task()'的調用。在選項2中,無論「run_as_daemon」的計算結果如何,都會調用do_task()。 – selbie
我個人用過第一個選項。它是完全管理的,更容易被「讀者」理解。 – LPs
你應該管理'PID == 0'和'exit'那種情況下,使相當於 – LPs