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