c/c++语言开发共享如何在使用freopen后写入stdout

freopen ing stdout ,如何在终端上打印?

 freopen("out", "w", stdout); // reopen stdout /* something */ printf("Now I want to print this on terminal"); 

    我相信这就是你要找的东西:

    一旦我使用了freopen,我怎么能得到原来的stdout(或stdin)?

    没有便携式解决方案。 但该链接还解释了使用您自己的流和可在大多数posix系统上运行的非便携式解决方案的可能解决方案。

    没有好办法。 如果您需要切换回来,最好的解决方案是不要首先使用freopen。 尝试使用您自己的显式输出(或输入)流变量,您可以随意重新分配,同时保持原始标准输出(或标准输入)不受干扰。 例如,声明一个全局

     FILE *ofp; 

    并用fprintf(ofp,…)替换对printf(…)的所有调用。 (显然,你也必须检查对putchar和put的调用。)然后你可以将ofp设置为stdout或其他任何东西。

    您可能想知道是否可以完全跳过freopen,并执行类似的操作

     FILE *savestdout = stdout; stdout = fopen(file, "w"); /* WRONG */ 

    让自己以后能够恢复stdout

     stdout = savestdout; /* WRONG */ 

    但是像这样的代码不太可能工作,因为stdout(和stdin和stderr)通常是不能重新分配的常量(这就是freopen首先存在的原因)。

    以不可移植的方式,可以在调用freopen以在其位置打开某个文件之前保存关于流的信息,以便稍后可以恢复原始流。 最直接和最可靠的方法是使用特定于系统的调用(如dup或dup2)操作底层文件描述符(如果可用)。 另一种方法是复制或检查FILE结构的内容,但这非常不可移植且不可靠。

    在某些系统下,您可能能够重新打开一个特殊的设备文件(例如在Unix的现代版本下的/ dev / fd / 1),它仍然附加到(例如)原始标准输出。 在某些系统下,您可以明确地重新打开控制终端,但这不一定是您想要的,因为原始输入或输出(即在您调用freopen之前stdin或stdout之前的内容)可能已被重定向到命令行。

    你可以这样做:

     #include  ofstream out("out.txt"); out<<"something"; then cout<<"something"; 

      以上就是c/c++开发分享如何在使用freopen后写入stdout相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/559871.html

      (0)
      上一篇 2021年1月27日
      下一篇 2021年1月27日

      精彩推荐