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