【问题标题】:How should one structure code when have two branches to branch into当有两个分支分支时,一个结构代码应该如何分支
【发布时间】:2017-03-11 02:43:21
【问题描述】:

说,我写了一个守护进程。 有两种选择,不知道选哪个:

选项 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 */
}

我知道他们做同样的事情,但想知道如何更好地构建代码以使其更易于维护和阅读。

【问题讨论】:

  • 您认为这两个程序等效(“做同样的事情”)的前提是不正确的。这两个程序之间存在差异。在选项 1 中,仅当 run_as_daemon 计算结果为 false 时才调用 do_task()。子进程不会调用对do_task() 的调用在选项2 中,无论run_as_daemon 的计算结果如何,都会调用do_task()。
  • 我个人曾经使用第一个选项。它由“读者”完全管理和更好地理解。
  • 你也应该管理 pid==0 和 exit 这个案例,以使解决方案等效
  • 这两个对于成功启动的子进程是不等价的,即如果fork() 返回零。
  • 这里强调的不是正确性,而是如何构建程序。我的意思是:“应该包括else 明确(通过其他)或隐含(条件检查后继续)。

标签: c unix daemon


【解决方案1】:

两者都适用于这种情况,但是在我看来,第一个选项会创建更具可读性的代码,因为您暗示可以采用其中一个分支,并且如果 run_as_demon != 则无法下拉到 do_task() 0

【讨论】:

    猜你喜欢
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    • 2019-11-21
    • 2011-07-15
    • 1970-01-01
    • 2012-01-29
    • 2010-11-25
    相关资源
    最近更新 更多