1

C でプログラムを作成し、Ubuntu で実行しました。主なコードは次のとおりです。

int main(){    
    pid_t pid=fork();
    if(pid==0){
        printf("d");
        exit(0);
    }
    else{
        printf("a");
        sleep(4);
    }
}

問題は、なぜコードsleep(4);が前に実行されるのかということですprintf("a");

誰かが私に答えてくれることを願っています、ありがとう!

4

3 に答える 3

4

そうではない。おそらく、printf()バッファを出力する機会が来るまで(あなたの場合、プロセスが終了したとき)、その出力をバッファリングしました。

于 2013-10-09T17:22:52.480 に答える
3

Q: コード sleep(4) が printf("a") の前に実行されるのはなぜですか?

A: printf("a") は、コードで見られるように、実際には" sleep (4)" の前に実行されます。

ただし、すぐには表示されません。

問題は「バッファリング」です。

詳細については、こちらをご覧ください。

推奨される代替手段:

pid_t pid=fork();
if(pid==0){
    fprintf(stderr, "d");
    exit(0);
}
else{
    fprintf(stderr, "a");
    sleep(4);
}

その理由は、「stderr」がバッファリングされていないためです。出力がすぐに表示されます。

stderr を使用する代わりに、ストリームのfflush(stdout)呼び出しまたは変更が含まれます。

于 2013-10-09T17:24:14.393 に答える
2

そうではありませんが、そのように見えるかもしれません。 printfおそらく実行後にのみフラッシュされるバッファに出力を入れますsleepfflush(stdout)への呼び出しをの後printf、ただし への呼び出しの前に置いてみてくださいsleep

于 2013-10-09T17:24:58.443 に答える