2016-03-20 16 views
-1

これは私が混乱しているコードです。フォーク機能について混乱しています

#include "csapp.h" 
void doit() 
{ 
    if ((fork) == 0) { 
      fork(); 
      printf("hello\n"); 
      return; 
    } 
    return; 
} 

int main() 
{ 
    doit(); 
    printf("hello\n"); 
    exit(0); 
} 

私はMac上でこのプログラムを実行し、私は一つだけのhello printed.Iを得たが「こんにちは」、「こんにちは」親に子プロセスのリターンと印刷1理由の5行ごとがあるはずだと思います。

誰でも私に答えを与えることができますか?どうもありがとう!!

+0

はこれを試してみてください。 :)歓声。 –

答えて

2

あなたはfork()を呼び出しておらず、そのアドレスをNULLポインタ定数の0と単に比較しました。

(fork) == 0が真実になりすぎる可能性がありますので、ifステートメントが実行されていない場合はブロック内に何が入っていますか。

fork()を呼び出して子プロセスを作成します。あなたは*参考になりました*答えを受け入れるべき

#include <stdio.h> 
#include <stdlib.h> 
#include <unistd.h> 
void doit(void) 
{ 
    if (fork() == 0) { 
     fork(); 
     printf("hello\n"); 
     return; 
    } 
    return; 
} 

int main(void) 
{ 
    doit(); 
    printf("hello\n"); 
    exit(0); 
} 
+0

第1に、両方ともprint helloを使って2つのprint文がある場合、どちらが実行されているかをどのように知っていますか?第二に、あなたがフォークを5回実行したい場合は、ある種のループでそれを行うべきです。 –

+0

私はその例が5回印刷するために「こんにちは」を得ることだったと思います。親が1回印刷し、両方の子が2回印刷するため、ここで何が起きるべきですか。 –

関連する問題