![論理演算子でfork()はどのように実行されますか? 「Hi」は何回印刷されますか?どのように? [閉鎖]](https://linux33.com/image/67138/%E8%AB%96%E7%90%86%E6%BC%94%E7%AE%97%E5%AD%90%E3%81%A7fork%EF%BC%88%EF%BC%89%E3%81%AF%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%E5%AE%9F%E8%A1%8C%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%20%E3%80%8CHi%E3%80%8D%E3%81%AF%E4%BD%95%E5%9B%9E%E5%8D%B0%E5%88%B7%E3%81%95%E3%82%8C%E3%81%BE%E3%81%99%E3%81%8B%EF%BC%9F%E3%81%A9%E3%81%AE%E3%82%88%E3%81%86%E3%81%AB%EF%BC%9F%20%5B%E9%96%89%E9%8E%96%5D.png)
#include <stdio.h>
#include <unistd.h>
int main()
{
(fork() && fork()) || (fork() && fork());
printf("Hi...\n");
return 0;
}
答え1
子はfork
値を返し0
、親はゼロ以外の値を返すことを知っています。かなり複雑になりますが、プロセスがどのように分岐するかについてツリーをスケッチできます。
or
最初の引数がある場合、結果はtrue
すでに知られているため、2番目の引数の計算はスキップされますtrue
。and
最初の引数がある場合は、2番目の引数をスキップします。false
この場合、結果はすでに知られているからですfalse
。各fork
呼び出しには、呼び出しの結果が異なる2つのプロセスインスタンスがあります。したがって、一部の子プロセスでは一部のフォークが呼び出されますが、他のプロセスでは呼び出されません。
スケッチ(黄色は、分岐した線が完了し、実行が次の行に進むことを意味します)。