なぜこのプログラムは "forked!" と表示するのでしょう?を4回表示するのですか?
2023-10-03 04:39:57
質問
なぜこのプログラムは "forked!" と表示するのですか?を4回表示するのでしょうか?
#include <stdio.h>
#include <unistd.h>
int main(void) {
fork() && (fork() || fork());
printf("forked!\n");
return 0;
}
どのように解決するのですか?
最初の
fork()
は呼び出し側のプロセス(p0と呼ぶ)で0以外の値を返し、 子プロセス(p1と呼ぶ)では0を返します。
p1では、ショートサーキットで
&&
が取られ、プロセスは
printf
を呼び出して終了します。p0 では、プロセスは式の残りを評価する必要があります。そして
fork()
を再び呼び出し、新しい子プロセスを生成します (p2)。
p0では
fork()
は0でない値を返し、ショートサーキットで
||
が取られるため、プロセスは
printf
を呼び出して終了します。
p2において
fork()
は0を返すので、||の残りを評価する必要があり、これは最後の
fork()
であり、p2 の子 (p3 と呼ぶ) を作成することになります。
P2 は次に
printf
を実行し、終了します。
次にP3は
printf
を実行し、終了します。
4
printf
が実行されます。
関連
-
[解決済み】ENOENTが「そのようなファイルやディレクトリはありません」という意味であるのはなぜですか?
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )
-
[解決済み] Xcode - 警告。C99 では関数の暗黙の宣言は無効です。
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] Cプリプロセッサはなぜ "linux "という単語を定数 "1 "と解釈するのですか?
-
[解決済み] C言語で関数をパラメータとして渡すにはどうすればよいですか?
-
[解決済み] printfにおけるdoubleの正しい書式指定子
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?
-
[解決済み】このC関数は常にfalseを返すべきですが、そうではありません。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Solve Dev-c++ [エラー] 'for' ループの初期宣言は、C99 または C11 モードでのみ許可されます。
-
警告: 'struct XXX' はパラメータリストの内部で宣言されています。
-
[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )
-
[解決済み] flexible array member not at end of structエラーの原因は何ですか?
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] C言語標準に準拠した構造体の初期化方法
-
[解決済み] C言語でオブジェクト指向のコードを書くとしたら、どのようにすればよいのでしょうか?[クローズド]
-
[解決済み] .aファイル、.soファイルとは何ですか?
-
[解決済み] なぜC言語では構造体を頻繁にtypedefする必要があるのですか?
-
[解決済み] i = (i, ++i, 1) + 1; は何をするのですか?