Computer >> Máy Tính >  >> Lập trình >> C ++

Chuyển hướng I / O trong C ++

Trong C, chúng ta có thể sử dụng hàm freopen () cho các mục đích chuyển hướng. Sử dụng chức năng này, chúng tôi có thể chuyển hướng con trỏ FILE hiện có đến một luồng khác. Cú pháp của freopen như sau:

FILE *freopen(const char* filename, const char* mode, FILE *stream)

Trong C ++ cũng vậy, chúng ta có thể thực hiện chuyển hướng. Trong C ++, các luồng được sử dụng. Tại đây, chúng ta có thể sử dụng dòng cú pháp của mình và cũng có thể chuyển hướng các luồng hệ thống. Trong C ++, có ba loại luồng.

  • istream :Luồng, chỉ có thể hỗ trợ đầu vào
  • ostream :Luồng, chỉ có thể hỗ trợ đầu ra
  • iostream :Chúng có thể được sử dụng cho đầu vào và đầu ra.

Các lớp này và các lớp dòng tệp được dẫn xuất từ ​​lớp ios và stream-buf. Vì vậy, các đối tượng luồng IO và luồng hoạt động tương tự. C ++ cho phép thiết lập bộ đệm luồng thành bất kỳ luồng nào. Vì vậy, chúng tôi có thể chỉ cần thay đổi bộ đệm luồng được liên kết với luồng để chuyển hướng. Ví dụ:nếu có hai luồng A và B và chúng tôi muốn chuyển hướng Luồng A sang Luồng B, chúng ta cần làm theo các bước sau:

  • Nhận bộ đệm luồng A và lưu trữ nó
  • Đặt bộ đệm luồng A thành bộ đệm luồng khác B
  • Đặt lại bộ đệm luồng A về vị trí cũ của nó (Tùy chọn)

Mã mẫu

#include <fstream>
#include <iostream>
#include <string>
using namespace std;
int main() {
   fstream fs;
   fs.open("abcd.txt", ios::out);
   string lin;
   // Make a backup of stream buffer
   streambuf* sb_cout = cout.rdbuf();
   streambuf* sb_cin = cin.rdbuf();
   // Get the file stream buffer
   streambuf* sb_file = fs.rdbuf();
   // Now cout will point to file
   cout.rdbuf(sb_file);
   cout << "This string will be stored into the File" << endl;
   //get the previous buffer from backup
   cout.rdbuf(sb_cout);
   cout << "Again in Cout buffer for console" << endl;
   fs.close();
}

Đầu ra

Again in Cout buffer for console

abcd.txt

This string will be stored into the File