头文件:#include <stdio.h>
freopen()函数用于文件流的的重定向,一般是将 stdin、stdout 和 stderr 重定向到文件。
所谓重定向,就是改变文件流的源头或目的地。stdout(标准输出流)的目的地是显示器,printf()是将流中的内容输出到显示器;可以通过freopen()将stdout 的目的地改为一个文件(如output.txt),再调用 printf(),就会将内容输出到这个文件里面,而不是显示器。
freopen()函数的原型为:
FILE *freopen(char *filename, char *type, FILE *stream);
【参数】filename为要重定向到的文件名;type为文件打开方式,请参考fopen()函数;stream为被重定向的文件流(一般是 stdin、stdout 或 stderr)。
【返回值】成功则返回指向filename文件的指针,否则返回NULL。
【实例】将标准输出流重定向到文件。
- #include<stdio.h>
- int main()
- {
- if(freopen("D:\\OUTPUT.txt","w",stdout)==NULL)
- printf("重定向出错");
- printf("重定向成功");
-
- fclose(stdout);
- return 0;
- }
运行程序,如果重定向成功,D盘下会多出一个文件 OUTPUT.txt,文件内容为“重定向成功”。
又如,从文件in.txt中读入数据,计算加和输出到out.txt中。
- #include<stdio.h>
- int main()
- {
- freopen("in.txt","r",stdin);
- freopen("out.txt","w",stdout);
- int a,b;
- while(scanf("%d%d",&a,&b)!=EOF)
- printf("%d\n",a+b);
- fclose(stdin);
- fclose(stdout);
- return 0;
- }
如果要恢复默认的文件流,可以重新打开标准控制台设备文件,只是这个设备文件的名字是与操作系统相关的。
DOS/Win:
freopen("CON", "r", stdin);
Linux:
freopen("/dev/console", "r", stdin)
最后,给出一个重定向的模板:
- #include <stdio.h>
- int main()
- {
- freopen("slyar.in", "r", stdin);
- freopen("slyar.out", "w", stdout);
- /* 中间按原样写代码,什么都不用修改 */
- fclose(stdin);
- fclose(stdout);
- return 0;
- }