1 fprintf()函数
fprintf()函数的作用是将格式化的数据打印到流中。该函数的格式为
int fprintf(
FILE *stream
, const char *format [, argument ]...
);
其中,参数stream表示数据要被打印到的流。对于fprintf()函数的详细用法,请参考《利用文件流实现文件读写》
2 stdout和stderr
stdout是标准的输出流,而stderr是标准的错误输出流。stdout和stderr的类型都是FILE*,在stdio.h中定义。默认情况下,stdout和stderr中的数据都会被打印到屏幕上。
3 将stdout和stderr作为fprintf()函数的参数
fprintf()函数的第一个参数是FILE*,而stdout和stderr的类型都是FILE*,所以stdout和stderr都可以作为fprintf()函数的第一个参数。
2.1 默认输出
对于fprintf()函数和stdout和stderr,有如下代码
fprintf(stdout, "Hello ");
fprintf(stderr, "World!");
因为在“2 stdout和stderr”中提到,默认情况下,stdout和stderr中的数据都会被打印到屏幕上,所以此时的输出如图1所示。
图1 默认输出
2.2 重定向输出
可以通过指令的方式将stdout和stderr的输出修改为指定的文件中。
2.2.1 默认方式重定向
使用“2.1 默认输出”中提到的代码,在编译程序之后,在exe程序所在目录的cmd下,输入如下指令
图2 默认重定向
其中,1.exe是编译生成的exe文件;右尖括号“>”是重定向符号;“1.txt”是重定位之后的目的文件。需要注意的是,使用默认方式重定向,只能重定向stdout,而不能重定向stderr,即此时stdout流中的数据保存到了1.txt,而stderr流中的输入依然在屏幕中显示,如图2、图3所示。
图3 默认重定向的目的文件
2.2.2 参数指定方式
默认方式重定向只能重定向stdout流中数据的目的,可以通过指定参数的方式重定向stdout流和stderr流中数据的目的,如图4所示。
图4 参数重定向
从图中可以看到,参数数字1表示重定向stdout流中数据的目的,而参数数字2则表示重定向stderr流中数据的目的。需要注意的是,参数数字与右尖括号“>”之间不能有空格。
使用图5所示的指令,可以将同时将stdout流和stderr流中数据重定向。
图5 同时重定向
此时,1.txt的内容如图6所示。
图6 同时重定向的目的文件