[英]Redirect stdout to parent process console window
#include <windows.h>
#include <wincon.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
int main(int argc, char* argv[])
{
printf("output displayed in parent process\n");
FreeConsole();
AllocConsole();
printf("output displayed in child process console\n");
// how do I redirect stdout to
// that one I've had before FreeConsole?
return 0;
}
(當stdout重定向到文件時,它工作正常:myapp.exe> out.txt)
int main(int argc, char* argv[])
{
printf("output displayed in parent process\n");
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
FreeConsole();
AllocConsole();
printf("output displayed in child process console\n");
SetStdHandle(STD_OUTPUT_HANDLE,hStdOut);
printf("no success 1\n");
return 0;
}
int main(int argc, char* argv[])
{
printf("output displayed in parent process\n");
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
int fd = _open_osfhandle((intptr_t)hStdOut, _O_TEXT);
FreeConsole();
AllocConsole();
printf("output displayed in child process console\n");
FILE* hf = _fdopen( fd, "w" );
*stdout = *hf;
setvbuf( stdout, NULL, _IONBF, 0 );
printf("no success 2\n");
return 0;
}
進程只能直接寫入它所連接的控制台。 如果使用自己的控制台創建子進程,或者在啟動后分配自己的控制台,則無法隨后寫入父控制台。
如果父進程創建了一個匿名管道,它可以使用write句柄作為子進程的stdout。 父進程需要為管道提供服務; 例如,它可能有一個線程從管道讀取數據並將其寫入自己的控制台。
子進程不必擔心它是寫入文件還是父進程。 這對stdout來說都是正常的I / O.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.