标题:[实践OK]Linux系统下的stderr和stdout详细解说。 出处:向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除 时间:Thu, 13 Jun 2019 17:58:28 +0000 作者:jackx 地址:http://jackxiang.com/post/10224/ 内容: #cat stdouterr.c #include int main(){ fprintf(stdout,"Hello "); fprintf(stderr,"World!"); return 0; } 解答:这段代码的输出是什么呢?你可以快速的将代码敲入你电脑上(当然,拷贝更快),然后发现输出是 World!Hello 果然: ./stdouterr World!Hello 这是为什么呢?在默认情况下,stdout是行缓冲的,他的输出会放在一个buffer里面,只有到换行的时候,才会输出到屏幕。而stderr是无缓冲的,会直接输出,举例来说就是printf(stdout, "xxxx") 和 printf(stdout, "xxxx\n"),前者会憋住,直到遇到新行才会一起输出。而printf(stderr, "xxxxx"),不管有么有\n,都输出。 stdout憋住,证明换行才会输出: #cat stdouterr.c #include int main(){ fprintf(stdout,"Hello "); fprintf(stdout,"Hello\n "); fprintf(stdout,"Hello "); fprintf(stderr,"World!"); return 0; } #./stdouterr Hello Hello #stdout换行输出 World! Hello #World!是stderr输出,会立即输出,在它上面Hello的前面输出。 #include int main(){ fprintf(stderr, "Can't open it!\n"); fprintf(stdout, "Can't open it!\n"); printf("Can't open it!\n"); return 0; } 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 Generated by Jackxiang's Bo-blog 2.1.1 Release