Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

fstream(3CC4)

名前

fstream - ファイル I/O 用ストリームクラス

形式

 
#include <fstream.h>
typedef long streampos;
typedef long streamoff;
class unsafe_ios {
public:
     // エクスポートされた型
        // ストリームのステータスビット
        enum io_state   {
            goodbit  = 0x00,        // ビットは設定されていない: すべて良好
            eofbit   = 0x01,        // ファイルの終わりに位置している
            failbit  = 0x02,        // 最後の入出力操作に失敗
            badbit   = 0x04,        // 無効な操作を行おうとした
            hardfail = 0x80         // 回復不能なエラー
            };
        // ストリーム操作モード
        enum open_mode  {
            in       = 0x01,        // 読み取りのためにオープン
            out      = 0x02,        // 書き込みのためにオープン
            ate      = 0x04,        // 最初のオープン時に EOF までシーク
            app      = 0x08,        // 追加モード: EOF にすべて追加
            trunc    = 0x10,        // ファイルがすでに存在する場合ファイルを切り捨て
            nocreate = 0x20,        // ファイルが存在しない場合オープンが失敗
            noreplace= 0x40         // ファイルがすでに存在する場合オープンが失敗
        };
        // ストリームシーク方向
        enum seek_dir { beg=0, cur=1, end=2 };
     // 残りについては ios(3CC4) を参照...
};
class  filebuf : public streambuf {
     // filebuf(3CC4) を参照...
};
class unsafe_fstreambase : virtual public unsafe_ios {
        unsafe_fstreambase();
        unsafe_fstreambase(const char*, int, int = filebuf::openprot);
        unsafe_fstreambase(int);
        unsafe_fstreambase(int _f, char*, int);
        ~unsafe_fstreambase();
        void open(const char*, int, int = filebuf::openprot);
        void attach(int);
        void close();
        void setbuf(char*, int);
        filebuf* rdbuf();
};
class fstreambase : virtual public ios, public unsafe_fstreambase {
public:
        fstreambase() ;
        fstreambase(const char*, int, int=filebuf::openprot) ;
        fstreambase(int) ;
        fstreambase(int, char*, int) ;
        void    open(const char*, int, int=filebuf::openprot) ;
        void     attach(int);
        void     close() ;
        void     setbuf(char*, int) ;
        filebuf* rdbuf();
};
class ifstream : public fstreambase, public istream {
public:
     // エクスポートされた関数
     void open(const char* fname, int omode=ios::in,
        int prot=filebuf::openprot);
     filebuf* rdbuf();
public:
     // エクスポートされたコンストラクタ
     ifstream();
     ifstream(const char* fname, int omode=ios::in,
        int prot=filebuf::openprot);
     ifstream(int fileno);
     ifstream(int fileno, char* buf, int size);
};
class ofstream : public fstreambase, public ostream {
public:
     // エクスポートされた関数
     void open(const char* fname, int omode=ios::out,
        int prot=filebuf::openprot);
     filebuf* rdbuf();
public:
     // エクスポートされたコンストラクタ
     ofstream();
     ofstream(const char* fname, int omode=ios::out,
        int prot=filebuf::openprot);
     ofstream(int fileno);
     ofstream(int fileno, char* buf, int size);
};
class fstream : public fstreambase, public iostream {
public:
     // エクスポートされた関数
     void open(const char * fname, int omode,
        int prot=filebuf::openprot);
     filebuf* rdbuf();
public:
     // エクスポートされたコンストラクタ
     fstream();
     fstream(const char* fname, int omode,
        int prot=filebuf::openprot);
     fstream(int fileno);
     fstream(int fileno, char* buf, int size);
};

説明

クラス ifstreamofstream、および fstream はそれぞれ、クラス istreamostream、および iostream をファイルを使用した I/O 用に特殊化したものです。そのため、関連付けられた streambuffilebuf です。

補助クラス fstreambase は実装の詳細であり、主に共通の関数のセットを提供します。それについては詳しく説明しません。

これらのクラスをまとめて説明し、Xstream の表記を使用して、ifstreamofstream、または fstream のどれも等しく表します。

fstreamifstreamofstream のオブジェクトは、相互排他ロックを使用することで、複数のスレッドによる同時アクセスに対して保護されます。MT-安全性を必要としない新しいファイルクラスを派生するには、クラス unsafe_fstreambase を使用できます。クラス fstreambase は提供されている 3 つのファイルクラスの基底クラスで、相互排他ロックを使用して MT-安全性を実現します。

ほかの iostream クラスの場合、相互排他ロックを無効にするには、クラス stream_MT で定義されているメンバー関数 set_safe_flag を呼び出します。

コンストラクタ

Xstream()

どのファイルにも接続されていないクローズした Xstream を構築します。

Xstream(name, mode, prot)

Xstream を構築し、オープンモードビットに mode、およびファイル保護ビットに prot を使用して、ファイル name をオープンします。(後述の open を参照)。デフォルトのオープンモードは ifstream の場合は入力、ofstream の場合は出力になります。デフォルトの保護は filebuf::openprot (0666) です。エラーは Xstream エラー状態で格納されます。ios(3CC4) を参照してください。

Xstream(f)

ファイル記述子 f (すでにオープンしている必要がある) にアタッチされた Xstream を構築します。(この条件はテストしません)。

Xstream(f, ptr, len)

ファイル記述子 f (すでにオープンしている必要がある) にアタッチされた Xstream を構築します。(この条件はテストしません)。filebufptr が指す位置から始まる len char をバッファー (予約領域) として使用します。ptr がゼロ、または len がゼロ以下の場合、予約領域はなく、fbuf はバッファリングされません。

メンバー関数

fs.attach(f)

fs をオープンファイル記述子 f に接続します。fs がすでにファイルに接続されている場合は要求を無視し、ios::failbitfs エラー状態に設定します。

fs.close()

関連付けられた filebuf をクローズし、fs からファイルを切断します。filebufclose 呼び出しが成功した場合はエラー状態をクリアします。それ以外の場合は、ios::failbitfs エラー状態に設定します。

fs.open(name, mode, prot)

ファイル name をオープンし、そのファイル記述子を fs に接続します。ファイルが存在せず、modeios::nocreate が設定されていない場合、openprot で指定された保護ビット (デフォルト値は 0666) でファイルを作成しようと試みます。mode パラメータは、ともに論理和をとることができる ios::open_mode のビットの集まりです。

ios::app

最初にファイルの終端までシークします。それ以降の書き込みは常にファイルの終端に追加されます。このフラグは ios::out を意味します。

ios::ate

最初にファイルの終端までシークします。このフラグは ios::out を暗黙的に示していませんが、ファイルの終端からのみ操作を開始します。

ios::in

ファイルを入力のためにオープンします。入力のためにファイルを開き、そのファイルが存在しない場合、作成されません。ifstream の構築またはオープンでは常にこのビットを暗示するため、ビットを設定する必要がないことを意味します。fstream に設定した場合、入力は可能な場合に許可されることを意味します。ofstream に設定した場合、ファイルのオープン時に、ファイルが切り捨てられないことを意味します。

ios::out

ファイルを出力のためにオープンします。ofstream の構築またはオープンでは常にこのビットを暗示するため、ビットを設定する必要がないことを意味します。fstream に設定した場合、出力は可能な場合に許可されることを意味します。ifstream に設定できますが、ファイルへの出力は許可されません。

ios::trunc

ファイルが存在する場合、そのオープン時にゼロの長さに切り捨てます。ios::out が指定または暗黙的に指定され、ios::ateios::app もどちらも指定されていない場合は、このビットが暗黙的に指定されます。

ios::nocreate

ファイルがすでに存在していない場合は作成しないでください。この場合、open が失敗します。

ios::noreplace

ファイルはすでに存在していてはなりません。存在している場合、open が失敗します。このビットは、ファイルを出力用にオープンする場合にのみ意味を持ちます。

filebuf* fb = fs.rdbuf()

fs に関連付けられた filebuf へのポインタを返します。これはこの関数の基底クラスバージョンと同じですが、戻り型が具体的に filebuf になります。

fs.setbuf(ptr, len)

これは ptr の位置に len char のバッファーを予約領域として提供します。これは filebuf バージョンの setbuf を呼び出し、その戻り値を使用して、fs のエラー状態を調整します。つまり、成功時はエラー状態をクリアし、エラー時は ios::failbit を設定します。

関連項目

filebuf(3CC4), ios(3CC4), ios.intro(3CC4), istream(3CC4), ostream(3CC4), sbufpub(3CC4)

C++ ライブラリリファレンス』の第 3 章「従来型の iostream ライブラリ」および第 4 章「マルチスレッド環境での従来型の iostreams ライブラリの使用」