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
-
修正:qBittorrent I/Oエラー
qBittorrentは、無料のクロスプラットフォームのオープンソースBitTorrentクライアントであり、µTorrentの代替品です。 Qtツールキットに基づいてC++で記述されており、ボランティアによって開発されています。ただし、「 I /Oエラーが発生しました」または「I/Oエラー:アクセスが拒否されました」と報告しているユーザーがいます。 」。このエラーによりダウンロードが停止するため、手動で再起動/停止する必要があります。 qBittorrentの入出力エラーの原因は何ですか? この特定の問題を調査するために、さまざまなユーザーレポートと、ユーザーが同様の状況に陥った場
-
Oracle 11g I/Oキャリブレーションの概要
Oracle®データベースがディスクに対してデータを読み書きするたびに、データベースはディスク入出力(I / O)操作を生成します。多くのソフトウェアアプリケーションのパフォーマンスはディスクI/Oによって制限され、中央処理装置(CPU)の時間の大部分をI/Oアクティビティの完了を待機するために費やすアプリケーションはI/Oバウンドです。 I / Oキャリブレーションは、この問題に対処するのに役立ちます。 はじめに 堅牢なI/Oサブシステムを確立することは、アプリケーションのインフラストラクチャを構築する上で不可欠な部分です。 I / Oスタック内のいずれかのコンポーネントのスループットが制