对于我生命中的大部分时间,我一直在使用cstdio
。现在我试图转移到iostream
。运行.exe并重定向标准输入和输出
假设我有一个名为“Foo.cpp中”一个独立的程序,看起来像这样:
int main(){ // foo.cpp
int x;
std::cin >> x;
std::cout << x + 5 << "\n";
}
在所谓的“bar.cpp”另一个程序,我叫foo的可执行文件。在过去,如果我想stdin和stdout重定向到一个文件,我会用freopen
像这样:
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"
}
现在我想重定向std::cin
和std::cout
到stringstreams。事情是这样的:
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"
}
但我所了解到的情况是std::cin
和std::cout
执行“foo.exe的”时,没有重定向。该程序现在预计用户输入并将打印到std::cout
。当执行“foo.exe”时,“bar.cpp”中的std::cin
和std::cout
仍分别重定向到instr
和outstr
。
我的问题是,有没有像我想要的那样用iostream
这样做的方法,还是我坚持使用freopen
?
操作系统负责处理可执行文件的输出。 C++语言没有重定向输出的功能。 –
用于在程序之间共享数据的常见解决方案:文件,套接字,管道(告诉OS将其他程序的管道输出转换为程序的标准输入),共享内存区域。在网上找。 –
你是否试过只做同样的freopen调用? – stark