fprintf与stderr、stdout的使用

来源:互联网 发布:牛耳软件教育 编辑:程序博客网 时间:2024/04/30 06:31

转自 http://blog.sina.com.cn/s/blog_912673ce01013qq9.html

fprintf()中的 stderr说明


 先看一个小例子:
---------------------------------------------
#include <stdio.h>

void main()
{
fprintf(stderr,"can't open it!");
fprintf(stdout,"can't open it !");
printf("can't open it!");
}

---------------------------------------------

上面程序编译成fprint文件,运行显示如下:
Can't open it! Can't open it! Can't open it!

若将输入重定向到一个temp.txt文件中,运行:./fprint >temp.txt 结果如下:
Can't open it!
查看temp.txt文件内容为:
Can't open it!Can't open it!

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

strerr是作为程序运行过程中的错误显示出来的,若想将它重写向到某文件中,需要运行如下命令:
./fprint 2>temp.txt
这样运行结果就为:
Can't open it!Can't open it!
查看temp.txt文件的内容是:
Can't open it!


1,我们知道,标准输出和标准错误默认都是将信息输出到终端上,那么他们有什么区别呢?让我们来看个题目:

问题:下面程序的输出是什么?(intel笔试2011)

int main(){
fprintf(stdout,"Hello ");
fprintf(stderr,"World!");
return0;
}

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

World!Hello

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


0 0