从 .exe 读取输入并写入 .exe 以读取国际象棋引擎命令

Reading input from .exe and writing to a .exe for reading Chess engine commands

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

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

我发现了一些关于管道的东西,但我认为它们真的很难 understand.Is 有任何现成的 library/interface 我可以使用吗?或者你可以用管道给我任何例子吗?

如果你想使用更大的框架,Qt 中有一个易于使用的 class 来处理进程: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

如果你只了解 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;
   }   
}