console输出 重定向的相关测试---目标是实时显示

#include<stdio.h>
#include<tchar.h>
#include<windows.h>
#include<locale.h>
int main()
{
    system("C_Code_test.exe > from_system.txt");//over write
    SECURITY_ATTRIBUTES sa = { 0 };
    sa.nLength = sizeof(sa);
    sa.bInheritHandle = TRUE;
    HANDLE outFile = CreateFile(TEXT("rFile.txt"), FILE_APPEND_DATA, FILE_SHARE_READ|FILE_SHARE_WRITE, &sa, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, INVALID_HANDLE_VALUE);
    
    STARTUPINFO st = { 0 };
    st.cb = sizeof(st);
    st.hStdOutput = outFile;
    st.hStdError = outFile;
    st.dwFlags = STARTF_USESTDHANDLES;
    PROCESS_INFORMATION pi = { 0 };
    if (CreateProcess(TEXT("C_Code_test.exe"), NULL, NULL, NULL, TRUE, CREATE_NO_WINDOW, NULL, NULL, &st, &pi))//append
    {
        WaitForSingleObject(pi.hProcess,INFINITE);
        CloseHandle(pi.hThread);
        CloseHandle(pi.hProcess);
        _tprintf(TEXT("subprocess exit\r\n"));
    }
    else
    {
        _tprintf(TEXT("createprocess error :%d\r\n"), GetLastError());
    }
    CloseHandle(outFile);
    system("pause");
    return 0;
}

https://www.codeproject.com/Articles/16163/Real-Time-Console-Output-Redirection

实时显示,虽然实现了,但问题还是挺多的,以为,好多字符,都是空格。
虚拟机没有这个问题。

win7 console application 通过alpc 与 conhost 交互。

介绍conhost 与 console application 的关系
https://www.howtogeek.com/howto/4996/what-is-conhost.exe-and-why-is-it-running/

Conhost 有 对应的console application 的 process handle。可用于确定这种绑定关系

为什么貌似vs 编译器能实时的显示其编译信息呢?

ReadOutputString 是conhost 中的一个与 ReadConsoleOutputCharacter 函数相关的底层实现,其内部有进程与console 结构相关的转换,以及读取等操作,通过对比win2k 中泄漏的源码,现在可部分读懂其结构。

后续,将继续。

争取实现,UI界面上,实时显示console 的output 信息。

发布了93 篇原创文章 · 获赞 13 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/qq_18218335/article/details/86701352