2014-02-10 42 views
0

我使用system("java .....")在cmd中使用VC++代码运行java应用程序。在windows中读取和写入cmd

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

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

但是我发现system()不会返回,直到我停止java应用程序。这是合理的。以及如何避免它?使用线程?

而最大的问题是我不知道如何获得输出和写入命令,任何人都可以给我一个方法吗?

非常感谢!

P.S. 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 %d\n", _pclose(output)); 
    } 
    else 
    { 
     printf("Error: Failed to read the pipe to the end.\n"); 
    } 

    system("pause"); 
    return 0; 
} 

当我使用“目录”。它完美的作品!但是,当我使用Java,psBuffer始终是什么,和java的输出应用程序通常是。它的管道不能重定向java的输出?


我改变我的代码,并提出一些java命令运行完美:

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

但是,当它运行的.jar,它failed.I阅读的.jar的代码,并找到输出由创建java.util.logging.Logger.info()。我不熟悉java。 info()如何在cmd中工作?

非常感谢!


最后,我发现上面最后的代码是Java应用程序的工作correctly.But起源输出尚未重定向。它会正常显示,但缓冲区被正确接收我want.Anyway我解决我的问题,输出。感谢大家!!!

+0

看看这个:http://justcheckingonall.wordpress.com/2008/08/29/console-window-win32-app/ – user1781290

+0

@ user1781290这与我的问题不同。但我发现可以使用管道。 – zzy

回答

2

MSDN文章Creating a Child Process with Redirected Input and Output解释了如何做到这一点。这是相当多的代码,但可以让你做你想做的事,并让你完全控制它。

另一方面,使用_popen更容易,但你没有太多的控制。取决于你的确切需求,你会写多少代码:)。

+0

我发现有关管道的问题,并有编辑问题。 – zzy