如果我有一个用c ++编写的Windows控制台程序,是否可以在程序运行时检索该程序的标准输出?如果没有,那么重写程序的最佳方法是什么?我知道我可以输出到文件并不断检查这些文件的更新。还有另外一种方法吗?还有更好的方法吗?
答案 0 :(得分:2)
Code Project中有一些有趣的文章:
答案 1 :(得分:1)
如果是准备好的控制台可执行文件 你总是可以将输出重定向到这样的文件:
C:GT; echo一些文字>档案
或
C:GT;节目>文件
如果你的意思是? 因为你的问题不是很清楚。
\\进入另一个程序
哦,好的 但我的第一个答案也习惯了。 因为还有另一种可能性:
C:GT; program1 |程序2
它在控制台程序之间制作“管道”
program2接收stdin什么program1抛出到stdout
它在控制台程序中常见的老式Unix方式练习
并且以这种方式,NO需要重写程序以专门支持它。
答案 2 :(得分:1)
是的,如果您自己启动该程序:
在CreateProcess中,您传递STARTUPINFO,您可以在其中指定SDIN,STDOUT和STDERR的句柄。请注意,一旦指定STARTF_USESTDHANDLES
标志,oyu需要提供所有三个。
此外,句柄需要是可继承的(否则,子进程无法访问它们),因此SECURITY_ATTRIBUTES基本上至少需要看起来像这样:
SECURITY_ATTRIBUTES secattr = { sizeof(SECURITY_ATTRIBUTES), NULL, TRUE };
您可以打开包含输入和接收输出的磁盘文件的句柄。或者,这可以是Pipes,可以在控制台应用程序运行时以递增方式读取/写入。
答案 3 :(得分:0)
如果你只对程序的stdout感兴趣,popen()会让这很简单:
FILE* program_output = popen("command line to start the other program");
//read from program_output as you would read a "normal" file
//...
pclose(program_output);
答案 4 :(得分:0)
您最有可能需要使用管道来实现这一目标,并且由于您使用的是Windows,因此这里有一个指向MSDN article的链接,其示例似乎完全符合您的要求。