【发布时间】:2012-11-12 13:20:10
【问题描述】:
假设我有类似的代码
#include <iostream>
using namespace std;
int main() {
cout << "Redirect to file1" << endl;
cout << "Redirect to file2" << endl;
return 0;
}
我想将第一个输出重定向到 file1,第二个输出重定向到 file2。这可能吗?
我认为在 C 中,fclose(stdout) 并重新打开 stdout 可能会有所帮助,但我不确定如何重新打开它或它是否有效。
谢谢
更新:为了什么?
我有一个程序 A,它从用户那里读取输入并生成相应的输出。现在我想检查它是否正确,我有一个程序 B,它为 A 生成输入,以及正确的输出。 B 将一次生成一组测试数据。我将进行数千次测试。
在我的机器上,一千倍 ./B > ``mktemp a.XXX`` 比使用 ofstream 效果更好。使用fstream千百次,我的硬盘灯疯狂闪烁。但重定向到临时文件时不会。
更新2:
在 C++ 中,流行的答案似乎是 cout 和 cerr。
C呢,除了stderr,我可以关闭stdout再重新打开吗?
【问题讨论】:
-
在 POSIX (Linux/OSX/BSD) shell 中,您可以以不同方式重定向
stdout和stderr。这是您可以做到的唯一方法,使用std::cout和std::cerr。在 Windows 控制台中,我认为这是不可能的。此外,您不能将旧的 C stdio 函数与 C++ 流混合使用。 -
@Pileborg 谢谢。如果我
fclose(stdout),有没有办法重新打开stdout?说在Linux中,我可以用fopen(...)重新打开stdout吗?它的参数是什么?谢谢 -
这是可能的,但需要知道它首先连接到什么 TTY 设备,并且您可能必须使用
open系统调用,然后使用fdopen。
标签: c++ c stdout io-redirection ostream