Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++의 I/O 리디렉션

<시간/>

C에서는 리디렉션 목적으로 freopen() 함수를 사용할 수 있습니다. 이 함수를 사용하여 기존 FILE 포인터를 다른 스트림으로 리디렉션할 수 있습니다. freopen의 구문은 다음과 같습니다.

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

C++에서도 리디렉션을 수행할 수 있습니다. C++에서는 스트림이 사용됩니다. 여기에서 자체 스트림을 사용하고 시스템 스트림을 리디렉션할 수도 있습니다. C++에는 세 가지 유형의 스트림이 있습니다.

  • istream :입력만 지원하는 스트림
  • 오스트림 :출력만 지원할 수 있는 스트림
  • iostream :입출력에 사용할 수 있습니다.

이러한 클래스와 파일 스트림 클래스는 ios 및 stream-buf 클래스에서 파생됩니다. 따라서 filestream 및 IO 스트림 개체는 유사하게 동작합니다. C++에서는 스트림 버퍼를 모든 스트림으로 설정할 수 있습니다. 따라서 리디렉션을 위해 스트림과 연결된 스트림 버퍼를 간단히 변경할 수 있습니다. 예를 들어 두 개의 스트림 A와 B가 있고 스트림 A를 스트림 B로 리디렉션하려면 다음 단계를 따라야 합니다.

  • 스트림 버퍼 A를 가져와서 저장합니다.
  • 스트림 버퍼 A를 다른 스트림 버퍼 B로 설정
  • 스트림 버퍼 A를 이전 위치로 재설정(선택 사항)

예시 코드

#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();
}

출력

Again in Cout buffer for console

abcd.txt

This string will be stored into the File