为什么使用fprintf时打印到stdout不会发生?

时间:2012-07-03 16:01:38

标签: c stdout stderr printf

我有这段代码:

#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秒。 我想知道为什么你永远不会被打印出来。

2 个答案:

答案 0 :(得分:15)

您需要fflush stdout,因为通常stdout是行缓冲的,并且您不会在程序中发出换行符。

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

stderr默认情况下未完全缓冲,因此您无需fflush

答案 1 :(得分:2)

默认情况下,

stdout是行缓冲的,这意味着缓冲区将在每个行尾('\n')刷新。 stderr是不受保护的,因此每个角色都会自动发送而无需刷新。

您可以通过在stdout输出的末尾放置\n来确认这一点。这样两条线将以1秒的间隔打印。