[C++]用freopen重定向文件

  测试代码:

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 }
posted @ 2011-07-20 13:49  Scan.  阅读(4417)  评论(4编辑  收藏  举报