16

私はこのコードを持っています:

#include <stdio.h>
#include <unistd.h>
int main()
{
        while(1)
        {
                fprintf(stdout,"hello-out");
                fprintf(stderr,"hello-err");
                sleep(1);
        }
        return 0;
}

出力はhello-err hello-err hello-err hello-err hello-err hello-err 1秒間隔です。なぜhello-outが印刷されないのか知りたいです。

4

2 に答える 2

15

fflush stdout通常stdoutは行バッファリングされており、プログラムで改行文字を発行しないため、これを行う必要があります。

            fprintf(stdout,"hello-out");
            fflush(stdout);

stderrデフォルトでは完全にバッファリングされていないため、バッファリングする必要はありませんfflush

于 2012-07-03T16:02:26.957 に答える
2

stdoutはデフォルトで行バッファリングされます。つまり、バッファは行末('\n')ごとにフラッシュされます。stderrは強化されていないため、すべての文字がフラッシュすることなく自動的に送信されます。

\nこれは、stdout出力の最後にを配置することで確認できます。そうすれば、両方の行が1秒間隔で印刷されます。

于 2012-07-03T16:07:23.607 に答える