在windows中读写cmd

Read and write to cmd in windows

本文关键字:cmd 读写 windows      更新时间:2023-10-16

我使用system("java .....")在带有VC++代码的cmd中运行了一个java应用程序。

java应用程序将在cmd中运行一个服务器,它将在控制台中输出信息。我也可以像在cmd中运行"dir"命令一样向它输入命令。

现在,我想在程序中获得所有输出,并使用C++代码编写发送到java应用程序的命令。

但我发现system()在我停止java应用程序之前不会返回。这是合理的。如何避免呢?使用线程?

最大的问题是我不知道如何获得输出和编写命令,有人能给我一个方法吗?

非常感谢!

附言:java应用程序的代码无法更改。

--------------------------------------我取得了进步-----------------------

int main()
{
char psBuffer[256];
FILE* output = _popen("java xxxx.jar", "rt" );
if(output == NULL)
return 0;
while(fgets(psBuffer, 256, output))
{
printf(psBuffer);
}
if (feof( output))
{
printf( "nProcess returned %dn", _pclose( output ) );
}
else
{
printf( "Error: Failed to read the pipe to the end.n");
}
system("pause");
return 0;
}

当我使用"dir"时,它非常有效!但当我使用java时,psBuffer总是什么都不是,java应用程序的输出是正常的。它是管道不能重定向java的输出吗?


我更改了代码,使一些java命令完美运行:

FILE* output = _popen("java -version 2>&1", "rt" );

但当它运行.jar时,它失败了。我读了.jar的代码,发现输出是由java.util.logging.Logger.info()创建的。我不熟悉java。info()如何在cmd中工作?

非常感谢!


最后,我发现上面的最后一个代码工作正常。但是java应用程序的原始输出没有被重定向。它会正常显示,但缓冲区正确地收到了我想要的输出。不管怎样,我解决了我的问题。谢谢大家!!!

MSDN的文章《用重定向的输入和输出创建子进程》解释了如何做到这一点。这是一个相当多的代码,但可以让你做你想做的事情,并让你完全控制它。

另一方面,使用_popen要容易得多,但您没有那么多控制权。取决于您将要编写多少代码的确切需求:)。