如何使用 && 评估这些 fork() 调用和|| C 中的运算符?

发布于 2024-12-11 18:36:26 字数 562 浏览 0 评论 0原文

我下面有一些使用 fork() 系统调用的 C 代码,但我只是很困惑:我该怎么做
解决它的作用:

int main()
{
    fork();
    fork() || fork() && fork();
    fork();
    printf("ämit");
}

fork() &&叉() || fork(); 的评估如下:

       fork()
      /      \
    0/        \>0
 || fork()     && fork()
     /\            /   \
    /  \         0/     \>0
   *    *     || fork()  *
                /   \
               *     *

我需要相同类型的树 fork() || fork() && fork()。谁能告诉我应该如何实现它?

I have below some code in C which uses the fork() system call, but I am just confused: how do I go about
solving what it does:

int main()
{
    fork();
    fork() || fork() && fork();
    fork();
    printf("ämit");
}

fork() && fork() || fork(); is evaluated some thing like this below:

       fork()
      /      \
    0/        \>0
 || fork()     && fork()
     /\            /   \
    /  \         0/     \>0
   *    *     || fork()  *
                /   \
               *     *

I need same kind of tree for fork() || fork() && fork(). Can anyone tell me how I should achieve it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恋竹姑娘 2024-12-18 18:36:26

如果这是一个面试问题(可能)或家庭作业(可能性较小),您首先要冷静地解释您可以如何评估它。

我的意思是,您声明第一个、第二个和第五个分叉是无条件的,但第三个和第四个分叉取决于第二个和第三个(并且第二个和第三个分叉将在多个进程中发生)。

将表明您理解这些概念。

然后你解释说这并不重要,因为如果任何编码器实际上向你提供了这样的代码,就会发生一些严重的焦油和羽毛行为。像这样的怪物代码在现实世界中没有立足之地,尽管它有助于测试您的理解,但您在现实中永远不会遇到它。

If this is an interview question (likely) or homework (slightly less likely), you first calmly explain how you could evaluate it.

By that I mean, you state that the first, second and fifth forks are unconditional but the third and fourth depend on the second and third (and that these second and third will be happening in multiple processes).

That will show that you understand the concepts.

Then you explain that it doesn't really matter because, if any coder actually handed you code like that, there'd be some serious tar'n'feather action going on. Code like this monstrosity has no place in the real world and, although it's good for testing your understanding, you'll never encounter it in reality.

扶醉桌前 2024-12-18 18:36:26

|| 的优先级低于 &&,并且如果第一个操作数包含足够的数据,这些运算符在评估第一个操作数后会短路 (||如果第一个操作数为 true,则 code> 短路;如果第一个操作数为 false,则 && 短路)。

fork()||fork()&&fork() 相当于 fork() || ( fork() && fork() )

因此:

                                                       fork()
                                                     0/     \>0
                                                     /       *  ==> || short-circuits, no evaluation of  fork()&&fork()
                                                   fork()
                                                   0/    \>0
 && short-circuits, no evaluation of &&fork() ==>  *     fork()
                                                         /   \
                                                        *     *

对于第一个示例,它相当于 ( fork() && fork() ) || fork()。

|| has lower precedence than &&, and those operators short-circuit after evaluation of the first operand if it contains sufficient data (|| short-circuits if first operand is true and && short-circuits if first operand is false).

fork()||fork()&&fork() is equivalent to fork() || ( fork() && fork() )

Therefore:

                                                       fork()
                                                     0/     \>0
                                                     /       *  ==> || short-circuits, no evaluation of  fork()&&fork()
                                                   fork()
                                                   0/    \>0
 && short-circuits, no evaluation of &&fork() ==>  *     fork()
                                                         /   \
                                                        *     *

For you first example it was equivalent to ( fork() && fork() ) || fork().

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文