[实践OK]Linux系统下的stderr和stdout详细解说。 不指定

jackxiang 2019-6-13 17:58 | |
#cat stdouterr.c


解答:这段代码的输出是什么呢?你可以快速的将代码敲入你电脑上(当然,拷贝更快),然后发现输出是
World!Hello
果然:
./stdouterr
World!Hello

这是为什么呢?在默认情况下,stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。而stderr是无缓冲的,会直接输出,举例来说就是printf(stdout, "xxxx") 和 printf(stdout, "xxxx\n"),前者会憋住,直到遇到新行才会一起输出。而printf(stderr, "xxxxx"),不管有么有\n,都输出。


stdout憋住,证明换行才会输出:
#cat stdouterr.c


#./stdouterr
Hello Hello   #stdout换行输出
World! Hello  #World!是stderr输出,会立即输出,在它上面Hello的前面输出。



make stdouterr
cc     stdouterr.c   -o stdouterr

./stdouterr
Can't open it!
Can't open it!
Can't open it!


./stdouterr > tmp.txt              
Can't open it!

这3句效果不是一样啊,有什么区别吗?

有区别。
stdout -- 标准输出设备 (printf("..")) 同 stdout。
stderr -- 标准错误输出设备
两者默认向屏幕输出。
但如果用转向标准输出到磁盘文件,则可看出两者区别。stdout输出到磁盘文件,stderr在屏幕。


cat tmp.txt
Can't open it!
Can't open it!



实践来自:https://blog.csdn.net/qingzhuyuxian/article/details/80391143

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/10224/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2019-6-13 18:02
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]