从.exe读取输入并写入.exe以读取Chess引擎命令

时间:2015-05-05 11:48:07

标签: c++ pipe exe interaction

我整天都在寻找一个示例c ++程序,它将使用ready .exe文件作为输出字符串,然后等待标准输入并再次输出输出等等。

例如,我的c ++程序将使用标准输出将“uci”写入.exe程序,.exe程序将再次使用字符串回复,我将能够在我的c ++程序中读取该字符串,我将再次发送一个新字符串并将等待.exe的回复。

我发现了一些关于管道的东西,但我认为它们真的很难理解。我可以使用任何现成的库/界面吗?或者你可以给我一些管道的例子吗?

2 个答案:

答案 0 :(得分:2)

如果您只是了解c ++的基础知识,那么您应该遵循这个原则,因为它不需要任何外部库,尽管有人说系统是邪恶的,如果它没有进入生产级程序就可以了

int main()
{
   std::string in;
   while(std::cin >> in)
   {
      std::string cmd = std::string("/full/path/to/second.exe <") + in + " >outfile.txt";
      system(cmd.c_str());
      std::ifstream fin("outfile.txt");
      std::cout << fin;
   }   
}

答案 1 :(得分:1)

如果你打开使用更大的框架,Qt中有一个易于使用的类来处理进程:http://doc.qt.io/qt-5/qprocess.html

QProcess exe;
exe.start("foo.exe");
exe.write("uci");
exe.waitForReadyRead();
auto result = exe.readAll();

在Windows上,您可以使用CreateProcess / CreatePipe,但代码将更加详细。例: https://msdn.microsoft.com/en-us/library/windows/desktop/ms682499%28v=vs.85%29.aspx