如何将printf的输出重定向到例如流或其他东西?我有一个与控制台库链接的GUI应用程序。该库重复调用printf。我需要一种方法来拦截这些内容并让它们通过函数进行处理。另外,创建控制台不是一个选项。我使用Windows,顺便说一句。重定向printf?
编辑 - 另外我希望不要重定向到一个文件。
如何将printf的输出重定向到例如流或其他东西?我有一个与控制台库链接的GUI应用程序。该库重复调用printf。我需要一种方法来拦截这些内容并让它们通过函数进行处理。另外,创建控制台不是一个选项。我使用Windows,顺便说一句。重定向printf?
编辑 - 另外我希望不要重定向到一个文件。
如果您想避免使用文件,您可以使用命名管道,将stdout重定向到它并在不同的线程或进程中读取它。
一些伪省略错误检查:
HANDLE hPipe = CreateNamedPipe("\\.\pipe\SomePipeName", ...);
int pipeFileDescriptor = _open_osfhandle(hPipe, someFlags);
_dup2(pipeFileDescriptor, _fileno(stdout));
现在什么printf
写入stdout
应该去管。
在另一个线程或进程可以从管道中读入缓冲区:
HANDLE hPipeClient = CreateFile("\\.\pipe\SomePipeName", ...);
ReadFile(hPipeClient, ...);
我认为这会工作,但我还没有测试它。
freopen(filename,mode,stdout);