C语言 为什么在使用 fprintf 时不会打印到标准输出



我有这个代码:

#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 永远不会被打印出来。

您需要

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

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

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

stdout 默认是行缓冲的,这意味着缓冲区将在行尾的每个末尾刷新 ( 'n ')。STDERR 是无封的,因此每个字符都会自动发送,无需刷新。

您可以通过在标准输出输出的末尾放置一个n来确认这一点。这样,两行将以 1 秒的间隔打印。

相关内容

  • 没有找到相关文章

最新更新