কম্পিউটার টিউটোরিয়াল

C++-এ I/O রিডাইরেকশন (I/O Redirection)

C-এ, আমরা রিডাইরেকশন (redirection) এর জন্য freopen() ফাংশন ব্যবহার করি। এই ফাংশন ব্যবহার করে, আমরা একটি বিদ্যমান FILE পয়েন্টারকে অন্য একটি স্ট্রিমে রিডাইরেক্ট করতে পারি। freopen-এর সিনট্যাক্স নিচের মতো:

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

C++-এও, আমরা রিডাইরেকশন করতে পারি। C++-এ স্ট্রিম (streams) ব্যবহার করা হয়। এখানে আমরা নিজস্ব স্ট্রিম ব্যবহার করতে পারি, এবং সিস্টেম স্ট্রিমগুলোও রিডাইরেক্ট করতে পারি। C++-এ তিন ধরনের স্ট্রিম রয়েছে:

  • istream: শুধু ইনপুট সাপোর্ট করার স্ট্রিম
  • ostream: শুধু আউটপুট সাপোর্ট করার স্ট্রিম
  • iostream: ইনপুট এবং আউটপুট দুটোই সাপোর্ট করে

এই ক্লাসগুলো, এবং ফাইল স্ট্রিম ক্লাসগুলো ios এবং streambuf ক্লাস থেকে ডেরাইভড। তাই ফাইল স্ট্রিম এবং I/O স্ট্রিম অবজেক্ট একইভাবে বিহேভ করে। C++ স্ট্রিম বাফার (stream buffer) যেকোনো স্ট্রিমে সেট করার অনুমতি দেয়। তাই আমরা সহজে স্ট্রিমের সাথে জড়িত স্ট্রিম বাফার পরিবর্তন করে রিডাইরেক্ট করতে পারি। উদাহরণস্বরূপ, যদি দুটি স্ট্রিম 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;
    
    // স্ট্রিম বাফার ব্যাকআপ নিন
    streambuf* sb_cout = cout.rdbuf();
    streambuf* sb_cin = cin.rdbuf();
    
    // ফাইল স্ট্রিম বাফার পান
    streambuf* sb_file = fs.rdbuf();
    
    // এখন cout ফাইলকে পয়েন্ট করবে
    cout.rdbuf(sb_file);
    cout << "This string will be stored into the File" << endl;
    
    // ব্যাকআপ থেকে পূর্বের বাফার ফেরত আনুন
    cout.rdbuf(sb_cout);
    cout << "Again in Cout buffer for console" << endl;
    
    fs.close();
    return 0;
}

আউটপুট (কনসোলে)

Again in Cout buffer for console

abcd.txt ফাইলে

This string will be stored into the File
  1. C++ স্ট্রিম ক্লাসের কাঠামো

  2. C#-এ ইন্ডেক্স-বেসড I/O ArrayList কালেকশন (Index-based I/O ArrayList Collection)

  3. সমাধান: qBittorrent I/O Error

  4. Oracle 11g ডিস্ক I/O অপ্টিমাইজেশন: একটি প্রায়োগিক ক্যালিব্রেশন গাইড