测试代码:
1 FILE *f = fopen("1.txt", "w");
2 printf("%x\n", f);
3 fprintf(f, "%s", "0123");
4 FILE *f2 = freopen("2.txt", "w", f);
5 printf("%x\n", f);
6 printf("%x\n", f2);
7 fprintf(f, "%s", "0123");
控制台输出:
10310c30
10310c30
10310c30
文件“1.txt”输出:
0123
文件“2.txt”输出:
0123
即:对于fopen或其他方式得到的FILE*结构指针,freopen可以通过修改参数指针对应的结构的数据成员(真正的文件句柄)的方式,使该文件对象映射到新的文件,从而达到将特定值的文件指针重定向的效果。成功的时候返回参数文件指针。
在一个地方重定向文件指针,其他使用该指针的代码操作的文件也会发生变化。该功能用于重定向标准输入输出很合适:
1 freopen("CONIN$", "r+t", stdin);
2 freopen("CONOUT$", "w+t", stdout);
一个应用,在Win32程序中使用控制台来帮助调试:
1 #include <windows.h>
2
3 int WINAPI WinMain( __in HINSTANCE hInstance, __in_opt HINSTANCE hPrevInstance, __in_opt LPSTR lpCmdLine, __in int nShowCmd )
4 {
5 BOOL b = AllocConsole();
6 freopen("CONOUT$", "w+t", stdout);
7
8 cout << "abcd" << endl;
9
10 FreeConsole();
11
12 return 0;
13 }