在windows中读写cmd
Read and write to cmd in windows
我使用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要容易得多,但您没有那么多控制权。取决于您将要编写多少代码的确切需求:)。
- 用C++快速读写文件
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- 如何在信号处理程序和普通函数中对全局变量进行互斥读写操作
- 在一个读写器队列中,我可以用volatile替换原子吗
- C++套接字对不读/写父/子
- 如何调试读写器锁的死锁?
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- Linux 挂载使用重新挂载以允许读写
- C++中读/写二进制文件
- 如何读/写或遍历 std::array 中的特定元素范围?
- 内存排序或读取-修改-写入操作,仅(读/写)内存顺序
- USB-HID 读/写(重叠)等待单个对象不返回C++
- 为什么使用_access时只读测试对读写文件有效
- Boost::Asio串行读/写打开:参数不正确
- 读/写 OpenMP 中的共享向量会减慢程序速度
- 谷歌测试读写同一文件失败
- Android USB 附件模式无法使用 libusb 与主机 PC 一起读/写
- 特定时间间隔 C++ 上的读写日志
- CreateProcess cmd.exe读/写管道死锁
- 在windows中读写cmd