繁体   English   中英

使用Visual Studio 2015编译时,将控制台(或stdout)重定向到命名管道不再起作用

[英]Redirecting console (or stdout) to named pipe no longer works when compiling with Visual Studio 2015

我有一个脚本引擎,它将其stdout重定向到命名管道以进行调试。 自Visual Studio 6起,下面的代码一直在工作,但是在使用VS2015进行编译时似乎不再起作用。 不会引发任何错误,但是输出将继续写入控制台,而不是命名管道。 当我在VS2012中编译此应用程序时,它可以按预期工作。

hNamedPipe是我要将控制台文本重定向到的管道。

int hCrt = _open_osfhandle((intptr_t)hNamedPipe, _O_TEXT);
FILE *hf = _fdopen(hCrt, "w");
*stdout = *hf;
setvbuf(stdout, NULL, _IONBF, 0);

使用Visual C ++ v14平台工具集进行编译时,如何将stdio重定向到命名管道?

多亏了James McNellis,我才得以得出一个解决方案:

这是设计使然。 FILE是不透明的数据类型; 您不能像在代码中那样取消对FILE的引用。

这是最终为我工作的代码:

void main()
{
    HANDLE hNamedPipe = Create_Some_Named_Pipe();

    RedirectIO(stdout, hNamedPipe);
    printf("Hello World."); //This arrived at the listening named pipe.
}

void RedirectIO(FILE *hFrom, HANDLE hTo)
{
    int fd = _open_osfhandle((intptr_t)hTo, _O_WRONLY | _O_TEXT);
    _dup2(fd, _fileno(hFrom));
    setvbuf(hFrom, NULL, _IONBF, 0); //Disable buffering.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM