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 信息。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值