C++ 有双向管道这种东西吗?我希望输入和输出能够在两个简单的程序之间进行交互
我想写一个程序来解决一个简单的猜谜游戏。我正在学习命令行管道和重定向,所以我想知道这是否可能 基本上我希望一个的输出是另一个的输入,然后这个的输出是另一个的输入 这一切只是为了好玩,所以我可以学习,我知道我可以更改猜谜游戏的源代码,并包括求解算法,但只是为了好玩,让我们假设我没有源代码 这可能吗?这是我的密码:C++ 有双向管道这种东西吗?我希望输入和输出能够在两个简单的程序之间进行交互,c++,shell,io-redirection,C++,Shell,Io Redirection,我想写一个程序来解决一个简单的猜谜游戏。我正在学习命令行管道和重定向,所以我想知道这是否可能 基本上我希望一个的输出是另一个的输入,然后这个的输出是另一个的输入 这一切只是为了好玩,所以我可以学习,我知道我可以更改猜谜游戏的源代码,并包括求解算法,但只是为了好玩,让我们假设我没有源代码 这可能吗?这是我的密码: //GuessingGame.cc #include <cstdlib> #include <iostream> using namespace st
//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;
}
//gussinggame.cc
#包括
#包括
使用名称空间std;
int main(){
srand(时间(空));
整数=兰德()%100;
int guess=-1;
int trycount=0;
while(猜测!=数字和计数<8){
猜不透;
如果(猜测<数字)
cout根据定义,管道是一种单向通信设备。但是,可以通过使用两个管道来解决这个问题,每个方向一个。问题是,通过一个外壳很难做到这一点,您必须制作一个程序来设置管道,为您的程序创建进程,然后使用设置为正确输入/ou的管道来执行它们tput通道
我能想到的唯一方法是通过shell实现这一点,就是使用命令创建两个管道。在后台启动一个程序,将输入和输出从/重定向到正确的管道,然后对另一个程序执行相同的操作,但使用另一个管道作为输入和输出。管道是单向的ipe在您选择的编程语言中,您必须自己创建两个管道
Korn Shell家族提供的双向I/O的传统抽象是协进程。名称中带有“ksh”的Shell的语法大部分是可移植的
ksh93/mksh/其他PDKSHE:
{ cmd1...; } |& cmd2 <&p >&p
{cmd1…;}|&cmd2&p
Bash和Zsh虽然有许多相同的特性,但却有不同的、不兼容的语法
coproc { cmd1; }; cmd2 <&"${COPROC[0]}" >&"${COPROC[1]}"
coproc{cmd1;};cmd2&“${coproc[1]}”
协进程的主要替代方案是进程替换、普通管道和命名管道,但它们本身并不是双向的。是的,就是这样。好吧,我认为这很有意义,我必须通读一遍,感谢您的快速响应!
coproc { cmd1; }; cmd2 <&"${COPROC[0]}" >&"${COPROC[1]}"