2

次のコードを実行しました:

#include<stdio.h>

int main()
{
    printf("hello \t");
    fork();
    fork();

   return 0;
}

出力:hello hello hello hello

これは、実行される呼び出しをfork()除いて、親プロセスのコードと同じように子プロセスのコードの正確なコピーを作成することを意味しますか?fork()

fork()「コードの次の行から実行を開始する」ということをどこかで勉強したので、これは私を混乱させます。したがって、これが true の場合、3 つの子プロセスと 1 つの親プロセスを作成し、1"hello"回だけ出力する必要があります。

これを解決してください。

このコードを gcc コンパイラで実行しました。

4

2 に答える 2

4

これは、文字列「hello」が親プロセスの出力バッファーに格納されたためです。

printfを満たすとバッファをフラッシュします\n。それ以外の場合は、バッファがいっぱいの場合にのみ出力文字列を出力します。

デフォルトでは、子プロセスは親プロセスのバッファを継承するため、バッファがフラッシュされない場合、子プロセスのバッファにも「hello」が含まれます。

もしも :

#include<stdio.h>

int main()
{
    printf("hello \n");
    fork();
    fork();

   return 0;
}

「こんにちは」が 1 つだけ表示されます。

于 2013-09-20T05:23:32.277 に答える
1

これはprintfが原因です...改行の後にバッファがフラッシュされるようにprintf( "hello \n")を使用するか、コードでfflush(stdout)を使用すると、出力は1つのhelloになります...

于 2013-09-20T05:32:12.507 に答える