情况是我的程序是通过system()
or启动的CreateProcess()
。
现在,当该程序将数据输出到控制台时,是否可以做一些事情。我的意思是程序输出它。那不是等待结束,收集数据然后处理它,而是在这个外部程序调用控制台的那一刻,它想要打印的数据,然后获取该数据,处理它并在控制台上输出其他东西安慰。
情况是我的程序是通过system()
or启动的CreateProcess()
。
现在,当该程序将数据输出到控制台时,是否可以做一些事情。我的意思是程序输出它。那不是等待结束,收集数据然后处理它,而是在这个外部程序调用控制台的那一刻,它想要打印的数据,然后获取该数据,处理它并在控制台上输出其他东西安慰。
最简单的方法通常是使用_popen(your_program, "r");
. 这将返回一个FILE *
您可以读取的内容,并且它读取的内容将是孩子写入其标准输出的任何内容。当您阅读EOF
该文件时,这意味着子进程已终止。这使得实时读取和处理孩子的输出变得相对容易。
在创建子进程之前调用 AllocConsole,或者使用 AttachConsole(ChildPID) 函数(在父进程中)。之后,您可以使用任何 ReadConsoleXXX 或 WriteConsoleXXX 函数。
在 Linux 上,创建一个命名管道:
system("mkfifo pipename")
然后在第一个程序中打开管道,并使用以下命令启动程序:
system("program > pipename")
我不确定如何在 Windows 上执行此操作。