c++标准输入输出流重定向
时间: 2023-12-22 07:29:11 浏览: 89
文件输入输出流-信息学奥赛一本通-教程PPT课件(第五版)第7章 文件和结构体(C++版)
C++标准库提供了两个函数来实现流的重定向:`rdbuf()`和`rdbuf(streambuf*)`。
1. `rdbuf()`函数返回与流对象关联的底层`streambuf`指针。通过将其返回值赋给另一个`streambuf`指针,可以实现流的重定向。例如:
```cpp
#include <iostream>
#include <fstream>
int main() {
std::ofstream file("output.txt");
std::streambuf* original = std::cout.rdbuf(); // 保存原始的cout流指针
std::cout.rdbuf(file.rdbuf()); // 将cout流重定向到文件output.txt
std::cout << "Hello, world!" << std::endl; // 输出到文件
std::cout.rdbuf(original); // 恢复原始的cout流指针
std::cout << "Hello, world!" << std::endl; // 输出到控制台
return 0;
}
```
2. `rdbuf(streambuf*)`函数将流对象与指定的`streambuf`对象关联起来,实现流的重定向。例如:
```cpp
#include <iostream>
#include <fstream>
int main() {
std::ofstream file("output.txt");
std::streambuf* buffer = file.rdbuf(); // 获取文件流的streambuf指针
std::cout.rdbuf(buffer); // 将cout流重定向到文件output.txt
std::cout << "Hello, world!" << std::endl; // 输出到文件
std::cout.rdbuf(std::cout.rdbuf()); // 将cout流重定向回控制台
std::cout << "Hello, world!" << std::endl; // 输出到控制台
return 0;
}
```
这样,通过使用`rdbuf()`函数,可以将C++标准输入输出流重定向到特定的端口,如串口、以太网、USB等。
阅读全文