C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でのI/Oリダイレクト


Cでは、リダイレクトの目的でfreopen()関数を使用できます。この関数を使用して、既存のFILEポインターを別のストリームにリダイレクトできます。 freopenの構文は次のようになります:

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

C ++でも、リダイレクトを行うことができます。 C ++では、ストリームが使用されます。ここでは、独自のストリームを使用したり、システムストリームをリダイレクトしたりできます。 C ++には、3つのタイプのストリームがあります。

  • istream :ストリーム、入力のみをサポートできます
  • ostream :ストリーム、出力のみをサポートできます
  • iostream :これらは入力と出力に使用できます。

これらのクラス、およびファイルストリームクラスは、iosおよびstream-bufクラスから派生しています。したがって、ファイルストリームオブジェクトとIOストリームオブジェクトは同じように動作します。C++では、ストリームバッファを任意のストリームに設定できます。したがって、リダイレクト用にストリームに関連付けられているストリームバッファを変更するだけです。たとえば、2つのストリーム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

  1. 修正:qBittorrent I/Oエラー

    qBittorrentは、無料のクロスプラットフォームのオープンソースBitTorrentクライアントであり、µTorrentの代替品です。 Qtツールキットに基づいてC++で記述されており、ボランティアによって開発されています。ただし、「 I /Oエラーが発生しました」または「I/Oエラー:アクセスが拒否されました」と報告しているユーザーがいます。 」。このエラーによりダウンロードが停止するため、手動で再起動/停止する必要があります。 qBittorrentの入出力エラーの原因は何ですか? この特定の問題を調査するために、さまざまなユーザーレポートと、ユーザーが同様の状況に陥った場

  2. Oracle 11g I/Oキャリブレーションの概要

    Oracle®データベースがディスクに対してデータを読み書きするたびに、データベースはディスク入出力(I / O)操作を生成します。多くのソフトウェアアプリケーションのパフォーマンスはディスクI/Oによって制限され、中央処理装置(CPU)の時間の大部分をI/Oアクティビティの完了を待機するために費やすアプリケーションはI/Oバウンドです。 I / Oキャリブレーションは、この問題に対処するのに役立ちます。 はじめに 堅牢なI/Oサブシステムを確立することは、アプリケーションのインフラストラクチャを構築する上で不可欠な部分です。 I / Oスタック内のいずれかのコンポーネントのスループットが制