簡體   English   中英

將stdout重定向到父進程控制台窗口

[英]Redirect stdout to parent process console window

我想實現以下情況:

  • 父進程(即cmd.exe有自己的控制台)
  • 子進程myapp.exe應該創建新的控制台窗口
  • 在子進程中,寫入stdout應該寫入父進程控制台
  • 如果將子進程的stdout重定向到文件,請保持這種方式

我已經設法以這種方式創建單獨的控制台:

#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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM