#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
解答:这段代码的输出是什么呢?你可以快速的将代码敲入你电脑上(当然,拷贝更快),然后发现输出是
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
评论列表