mercredi 19 avril 2017

C++ Run .exe file and redirect cin and cout

For most of my C++ life, I've been using cstdio. Now I'm trying to shift over to iostream.

Suppose I have a separate program called "foo.cpp" that looks like this:

int main(){ // foo.cpp
    int x;
    std::cin >> x;
    std::cout << x + 5 << "\n";
}

In another program called "bar.cpp", I call the foo executable. In the past, if I wanted to redirect stdin and stdout to a file, I would use freopen like so:

int main(){ // bar.cpp, redirecting stdin and stdout
    freopen("foo.in", "r", stdin); // Suppose "foo.in" contains a single integer "42"
    freopen("foo.out", "w", stdout);

    system("foo.exe"); // "foo.out" will contain "47"
}

Now I'm trying to redirect std::cin and std::cout to stringstreams. Something like this:

int main(){ // bar.cpp, redirecting cin and cout
    std::istringstream instr("62");
    std::ostringstream outstr;

    std::cin.rdbuf(instr.rdbuf());
    std::cout.rdbuf(outstr.rdbuf());

    system("foo.exe"); // outstr should contain "67"
}

But what I've learned is that std::cin and std::cout was not redirected when executing "foo.exe". The program now expected user input and will print to std::cout. When execution of "foo.exe" was done, std::cin and std::cout within "bar.cpp" still remained redirected to instr and outstr respectively.

My question is, is there a way to do it with iostream like I intended, or am I stuck with using freopen?

Please and thank you.

Aucun commentaire:

Enregistrer un commentaire