请问stdout和stderr有哪些区别呢?

描述

为什么大佬在写代码的时候,对于一些错误的提示信息喜欢用stderr,而不是直接用printf输出?

这里面是不是有什么讲究?

Printf  

在Linux里面,用于处理输入和输出的文件描述符有三个,分别表示标准输入,标准输出,和标准错误处理。

比如我们常用的 scanf 和 printf,一个从标准输入获取数据,一个往标准输出写入数据。

stdout和stderr都是输出,这两个的区别主要有三点。

首先,stdout有缓冲,stderr没有缓冲。

 

#include 
#include 


int main()
{
    const char *s = "no such file...";


    while (1) 
    {   
        fprintf(stderr, "error : %s", s); 
        sleep(1);
    }   


    return 0;
}
比如这个代码,使用stderr,会直接把字符串显示到屏幕上,用户能立马看见。

Printf  

但是如果换成stdout,用户什么也看不见。

因为代码中没加换行符,程序也没有正常结束。 平时我们用的printf,就是往stdout里面写数据。

所以使用stderr,它的实时性更高,有问题,立马看见。

第二点也跟缓冲有关系。如果使用stdout,当程序发生错误奔溃的时候,缓冲区里面的重要数据也会被清空,看不到日志,问题也不好解决。

第三点,使用stdout和stderr也可以把不同的数据分开,防止放在一起混乱。
#include 


int main()
{
    fprintf(stderr, "错误信息
");


    printf("正常输出信息
");


    return 0;
}
这一点在重定向的时候就能体现出来,默认只会把标准输出的数据定向到目标文件中。

Printf   







审核编辑:刘清

 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分