• [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 }
  • 相关阅读:
    BZOJ1040: [ZJOI2008]骑士
    Codeforces 849D.Rooter's Song
    POJ4852 Ants
    NOIP模拟赛 17.10.10
    Codeforces 851D Arpa and a list of numbers
    BZOJ2529: [Poi2011]Sticks
    BZOJ1826: [JSOI2010]缓存交换
    POJ3579 Median
    codevs1214 线段覆盖
    POJ2230 Watchcow
  • 原文地址:https://www.cnblogs.com/cbscan/p/2111589.html
Copyright © 2020-2023  润新知