Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/164.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有双向管道这种东西吗?我希望输入和输出能够在两个简单的程序之间进行交互_C++_Shell_Io Redirection - Fatal编程技术网

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]}"