c – 有双向管道这样的东西吗?我希望输入和输出在两个简单程序之间交互
作者:互联网
我想写一个程序来解决一个简单的猜谜游戏.我正在学习命令行管道和重定向,所以我想知道这是否可行.
基本上我希望一个的输出是另一个的输入,然后将其输出作为另一个的输入.
这一切都只是为了好玩,所以我可以学习,我知道我可以改变猜谜游戏的源代码并包括解决算法,但只是为了好玩,我们假设我没有源代码.
这甚至可能吗?这是我的代码:
//GuessingGame.cc
#include <cstdlib>
#include <iostream>
using namespace std;
int main() {
srand(time(NULL));
int number = rand()%100;
int guess = -1;
int trycount = 0;
while(guess != number && trycount < 8) {
cout << "Please enter a guess: ";
cin >> guess;
if(guess < number)
cout << "Too low" << endl;
else if(guess > number)
cout << "Too high" << endl;
trycount++;
}
if(guess == number)
cout << "You guessed the number!";
else
cout << "Sorry, the number was: " << number;
return 0;
}
Solver.cc
#include <iostream>
#include <fstream>
using namespace std;
int main(int argc, char* argv[]) {
string prompt;
int high = 100;
int low = 0;
int guess = 50;
getline(cin,prompt);
if(prompt == "Please enter a guess: ")
cout << guess;
while(true) {
getline(cin,prompt);
if(prompt == "Too low")
low = guess;
else if(prompt == "Too high")
high = guess;
else if(prompt == "You guessed the number!")
return 0;
guess = (low+high)/2;
cout << guess;
}
}
我希望你能理解我在做什么,我不太关心这个程序,这只是一个例子.主要问题是,如果您可以使用重定向和管道等与两个不同的程序进行交互.谢谢
解决方法:
根据定义,管道是单向通信设备.然而,它可以通过使用两个管道来解决,每个方向一个.问题是它无法通过shell轻松完成,您必须创建一个程序来设置管道,为程序创建进程,然后使用设置为正确输入/输出通道的管道执行它们.
我可以考虑如何通过shell实现这一点的唯一方法是使用mkfifo
命令创建两个管道.在后台启动一个程序,输入和输出重定向到/到正确的管道,然后对另一个程序执行相同操作,但使用另一个管道作为输入和输出.
标签:c,shell,io-redirection 来源: https://codeday.me/bug/20190826/1724705.html