0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

学益得智能硬件 来源:学益得智能硬件 2024-01-13 16:15 次阅读

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

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

c8da7938-b1ea-11ee-8b88-92fbcf53809c.png  

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,会直接把字符串显示到屏幕上,用户能立马看见。

c8ed00b2-b1ea-11ee-8b88-92fbcf53809c.png  

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

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

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

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

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


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


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


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

c908ca04-b1ea-11ee-8b88-92fbcf53809c.png   







审核编辑:刘清

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

    关注

    87

    文章

    10990

    浏览量

    206738
  • Printf
    +关注

    关注

    0

    文章

    79

    浏览量

    13480

原文标题:stdout和stderr有哪些区别

文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    请问PWM波输出方式中的边沿对齐与中心对齐什么区别

    请问PWM波输出方式中的边沿对齐与中心对齐什么区别?对于PMSM FOC应该使用那种对齐方式?为什么
    发表于 02-05 06:06

    请问GTM模块里的ATOM和TOM什么区别

    如题,GTM模块里的ATOM和TOM什么区别
    发表于 02-06 06:35

    $88和$0088什么区别

    请问,$88和$0088什么区别,为什么一个是直接寻址一个是扩展寻址
    发表于 10-12 22:45

    (文件描述符0、1、2),(stdin、stdoutstderr),(终端设...

    标准输入文件stdin,标准输出文件stdout和标准错误输出文件stderr分别得到的。那么文件描述符0、1和2到底是打开哪个文件得到的?这里该如何解释???望懂得其中缘由者指点
    发表于 03-02 22:05

    mini2440串口测试程序中stdoutstderr不懂,求大侠讲解下。。。

    主要是这两段程序不懂,那个stdoutstderr不懂。。void OutputStdChar(FILE *File) {//向设备写数据,打开一个串口,声明并且定义该函数 char Buffer
    发表于 10-25 12:45

    请问绕组和线圈区别吗?

    请问绕组和线圈区别吗?还是2者之间就没什么区别
    发表于 06-19 11:10

    请问固件和程序什么区别

    本帖最后由 一只耳朵怪 于 2018-5-25 16:13 编辑 请问固件和程序什么区别?固件是那种烧录进去的不可逆转的硬件编程么?为什么好多可重复烧写的代码叫做XXX固件?
    发表于 05-25 16:00

    请问一下printf格式符%ld %lld %d区别

    请问一下printf格式符%ld %lld %d区别
    发表于 12-02 07:18

    如何看到这些通过printf/fprintf输出到stdout/stderr的打印信息

    当我们使用 procd init 脚本让某个应用程序实现开机自启时,会发现应用程序中原本通过 printf/fprintf 等输出到 stdout/stderr 的打印信息都无法从串口或 adb
    发表于 12-29 07:45

    全志D1-H芯片 Tina 如何查看通过 procd init 脚本启动的应用输出到 stdout/stderr 的打印信息?

    问题描述当我们使用 procd init 脚本让某个应用程序实现开机自启时,会发现应用程序中原本通过 printf/fprintf 等输出到 stdout/stderr 的打印信息都无法从串口或
    发表于 03-16 13:54

    全志D1-H芯片 Tina 如何查看通过 procd init 脚本启动的应用输出到 stdout/stderr 的打印信息?

    问题描述当我们使用 procd init 脚本让某个应用程序实现开机自启时,会发现应用程序中原本通过 printf/fprintf 等输出到 stdout/stderr 的打印信息都无法从串口或
    发表于 03-29 19:13

    请问一下ARM7TDMI-S 和 ARM7TDMI 区别

    请问一下ARM7TDMI-S 和 ARM7TDMI 区别?有没有哪位大神可以解答一下
    发表于 10-09 15:43

    请问一下STUSB1600AQTR和STUSB1600AQTR IC什么区别

    请问一下STUSB1600AQTR和STUSB1600AQTR IC什么区别
    发表于 12-22 06:25

    请问一下放大器的共模抑制和失调电压什么区别

    请问一下放大器的共模抑制和失调电压什么区别
    发表于 03-31 15:29

    请问共模电感和差模电感的区别是什么?为何共模电感有4个脚?

    请问共模电感和差模电感的区别是什么?为何共模电感有4个脚? 共模电感和差模电感是在电路中有着不同作用的两种电感元件。它们的区别主要体现在其结构、性能以及在电路中的应用方式方面。 首先,让我们来理解
    的头像 发表于 02-05 14:55 365次阅读