論理演算子でfork()はどのように実行されますか? 「Hi」は何回印刷されますか?どのように? [閉鎖]

論理演算子でfork()はどのように実行されますか? 「Hi」は何回印刷されますか?どのように? [閉鎖]
#include <stdio.h>
#include <unistd.h>

int main()
{
(fork() && fork()) || (fork() && fork());
printf("Hi...\n");
return 0;
}

ベストアンサー1

子はfork値を返し0、親はゼロ以外の値を返すことを知っています。かなり複雑になりますが、プロセスがどのように分岐するかについてツリーをスケッチできます。

or最初の引数がある場合、結果はtrueすでに知られているため、2番目の引数の計算はスキップされますtrueand最初の引数がある場合は、2番目の引数をスキップします。falseこの場合、結果はすでに知られているからですfalse。各fork呼び出しには、呼び出しの結果が異なる2つのプロセスインスタンスがあります。したがって、一部の子プロセスでは一部のフォークが呼び出されますが、他のプロセスでは呼び出されません。

スケッチ(黄色は、分岐した線が完了し、実行が次の行に進むことを意味します)。 ここに画像の説明を入力してください。

おすすめ記事