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

    文章

    11219

    浏览量

    208872
  • Printf
    +关注

    关注

    0

    文章

    81

    浏览量

    13623

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

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

收藏 人收藏

    评论

    相关推荐

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

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

    (文件描述符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

    请问固件和程序什么区别

    本帖最后由 一只耳朵怪 于 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

    “移动PC”和笔记本电脑什么区别

    “移动PC”和笔记本电脑什么区别?    问:我想买一台低价笔记本电脑,怕买到“移动PC”,请问
    发表于 01-23 11:27 2412次阅读

    FPGA和单片机什么区别

    到底FPGA和单片机什么区别?根据我的经验,可以用下面进行概述。
    发表于 02-11 08:00 4.3w次阅读

    type-c和普通接口什么区别

      随着type-c接口的普及,现在越来越多的电子产品都使用了type-c接口,那么,type-c和普通接口什么区别?
    的头像 发表于 07-28 11:17 5835次阅读
    type-c和普通接口<b class='flag-5'>有</b>什么<b class='flag-5'>区别</b><b class='flag-5'>呢</b>?

    请问放大器与中继器什么区别

    请问放大器与中继器什么区别? 放大器和中继器是网络设备中常见的两种装置,它们在网络中起到了不同的作用。尽管这两个设备都可以增强信号,但它们有着不同的功能和使用场合。在本文中,我们将详细讨论放大器
    的头像 发表于 09-13 14:17 2269次阅读

    什么叫做LVDS信号?请问TTL信号与LVDS信号什么区别

    什么叫做LVDS信号?请问TTL信号与LVDS信号什么区别? LVDS信号 LVDS(Low Voltage Differential Signaling)又称低压差分信号传输技术,是一种采用差分
    的头像 发表于 10-18 15:38 2400次阅读

    天线和馈线哪些区别

    天线和馈线哪些区别? 天线和馈线是无线通信系统中不可或缺的两个部分,它们在实现无线信号的传输和接收过程中起着关键的作用。虽然天线和馈线都是用于无线通信的,但它们的功能和应用场景有所不同。以下将
    的头像 发表于 01-04 15:05 2029次阅读

    请问Docker和传统虚拟机什么区别

    虽然人跑了,但起码还有服务器陪着他,但屏幕前依然单身的你? 你连服务器都没有。
    的头像 发表于 03-29 15:54 421次阅读
    <b class='flag-5'>请问</b>Docker和传统虚拟机<b class='flag-5'>有</b>什么<b class='flag-5'>区别</b><b class='flag-5'>呢</b>?