c ++重定向函数输出到已编译的程序输入,反之亦然

时间:2016-01-21 10:16:59

标签: c++ linux bash cout io-redirection

我有一个编译程序,它从std :: cin接收一些编码数据,处理它并输出std :: cout中的编码数据。 可执行程序代码如下所示:

// Main_Program.cpp
// Compiled program that processes data.
int main(int argc, char* argv[]) {
    std::string data_in;
    std::string data_out;

    std::cin >> data_in;
    process_data(data_in, data_out);
    std::cout << data_out;

    return 0;
}

现在我想制作一个程序来测试它。 我有一个编码数据并将其发送到std :: cout的函数和另一个从std :: cin接收数据并对其进行解码的函数(我需要使用这些函数,因为它是测试的一部分)。 这些功能如下:

void encode_and_send(std::string non_encoded_data) {
    std::string encoded_data;
    encode_data(non_encoded_data, encoded_data);
    std::cout << encoded_data;
}

void receive_and_decode(std::string &non_encoded_data) {
    std::string encoded_data;
    std::cin >> encoded_data;
    decode_data(encoded_data, non_encoded_data);  
}

所以我想要一个程序使用encode_and_send来处理可执行程序,并使用receive_and_decode来捕获可执行程序的输出:

我的测试程序如下:

int main(int argc, char* argv[]) {
    std::string testdata = "NonEncodedDataToBeProcessed";
    std::string received_data;

    // How can I use this three calls to correctly handle input and output data? 
    // One option would be to redirect cout and cin to temp files and read them 
    // when calling the ./Main_Program, but is there a way to avoid files and 
    // directily redirect or pipe the inputs and outputs? 

    // encode_and_send(testdata);
    // system("./Main_Program");
    // receive_and_decode(received_data);

    // Here I can check that received_data is correct

    return 0;
}

感谢。

1 个答案:

答案 0 :(得分:0)

您可以创建临时fifo并使用它和管道将std::cout的{​​{1}}发送到Main_Program std::cin反之亦然< / em>,Test_Program中的类似内容:

bash