【问题标题】:Redirecting printf?重定向printf?
【发布时间】:2009-10-21 06:48:23
【问题描述】:

如何将 printf 的输出重定向到例如流或其他东西?我有一个与控制台库链接的 gui 应用程序。该库重复调用 printf。我需要一种方法来拦截它们并让它们由函数处理。此外,创建控制台不是一种选择。顺便说一句,我使用的是 Windows。

编辑 - 我也不希望重定向到文件。

【问题讨论】:

    标签: redirect


    【解决方案1】:

    freopen(文件名、模式、标准输出);

    【讨论】:

      【解决方案2】:

      如果你想避免使用文件,你可以使用命名管道,将标准输出重定向到它并在不同的线程或进程中读取它。

      一些省略错误检查的伪代码:

      HANDLE hPipe = CreateNamedPipe("\\.\pipe\SomePipeName", ...);
      int pipeFileDescriptor = _open_osfhandle(hPipe, someFlags);
      _dup2(pipeFileDescriptor, _fileno(stdout));
      

      现在printf 写入stdout 的内容应该进入管道。

      在另一个线程或进程中,您可以从管道中读取到缓冲区中:

      HANDLE hPipeClient = CreateFile("\\.\pipe\SomePipeName", ...);
      ReadFile(hPipeClient, ...);
      

      我认为它会起作用,但我还没有测试过。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-05-27
        • 2019-09-23
        • 2017-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多