从 .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;
}
}
我整天都在寻找一个示例 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;
}
}