为什么大佬在写代码的时候,对于一些错误的提示信息喜欢用stderr,而不是直接用printf输出?
这里面是不是有什么讲究?
在Linux里面,用于处理输入和输出的文件描述符有三个,分别表示标准输入,标准输出,和标准错误处理。
比如我们常用的 scanf 和 printf,一个从标准输入获取数据,一个往标准输出写入数据。
stdout和stderr都是输出,这两个的区别主要有三点。
首先,stdout有缓冲,stderr没有缓冲。
#include比如这个代码,使用stderr,会直接把字符串显示到屏幕上,用户能立马看见。#include int main() { const char *s = "no such file..."; while (1) { fprintf(stderr, "error : %s", s); sleep(1); } return 0; }
但是如果换成stdout,用户什么也看不见。
因为代码中没加换行符,程序也没有正常结束。 平时我们用的printf,就是往stdout里面写数据。
所以使用stderr,它的实时性更高,有问题,立马看见。
第二点也跟缓冲有关系。如果使用stdout,当程序发生错误奔溃的时候,缓冲区里面的重要数据也会被清空,看不到日志,问题也不好解决。
第三点,使用stdout和stderr也可以把不同的数据分开,防止放在一起混乱。
#include这一点在重定向的时候就能体现出来,默认只会把标准输出的数据定向到目标文件中。int main() { fprintf(stderr, "错误信息 "); printf("正常输出信息 "); return 0; }
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
Linux
+关注
关注
87文章
11219浏览量
208872 -
Printf
+关注
关注
0文章
81浏览量
13623
原文标题:stdout和stderr有哪些区别
文章出处:【微信号:学益得智能硬件,微信公众号:学益得智能硬件】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
(文件描述符0、1、2),(stdin、stdout、stderr),(终端设...
标准输入文件stdin,标准输出文件stdout和标准错误输出文件stderr分别得到的。那么文件描述符0、1和2到底是打开哪个文件得到的呢?这里该如何解释呢???望懂得其中缘由者指点
发表于 03-02 22:05
mini2440串口测试程序中stdout和stderr不懂,求大侠讲解下。。。
主要是这两段程序不懂,那个stdout和stderr不懂。。void OutputStdChar(FILE *File) {//向设备写数据,打开一个串口,声明并且定义该函数 char Buffer
发表于 10-25 12:45
请问固件和程序有什么区别呢?
本帖最后由 一只耳朵怪 于 2018-5-25 16:13 编辑
请问固件和程序有什么区别呢?固件是那种烧录进去的不可逆转的硬件编程么?为什么好多可重复烧写的代码叫做XXX固件?
发表于 05-25 16:00
如何看到这些通过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
请问放大器与中继器有什么区别?
请问放大器与中继器有什么区别? 放大器和中继器是网络设备中常见的两种装置,它们在网络中起到了不同的作用。尽管这两个设备都可以增强信号,但它们有着不同的功能和使用场合。在本文中,我们将详细讨论放大器
什么叫做LVDS信号?请问TTL信号与LVDS信号有什么区别?
什么叫做LVDS信号?请问TTL信号与LVDS信号有什么区别? LVDS信号 LVDS(Low Voltage Differential Signaling)又称低压差分信号传输技术,是一种采用差分
天线和馈线有哪些区别呢?
天线和馈线有哪些区别呢? 天线和馈线是无线通信系统中不可或缺的两个部分,它们在实现无线信号的传输和接收过程中起着关键的作用。虽然天线和馈线都是用于无线通信的,但它们的功能和应用场景有所不同。以下将
评论