std:: FILE
|
定義先ヘッダ
<cstdio>
|
||
|
typedef
/* unspecified */
FILE
;
|
||
各
std::FILE
オブジェクトはCストリームを表します。
C++標準が参照するC標準は、
std::FILE
が完全オブジェクト型であるかどうかを規定していません。有効な
std::FILE
のコピーを作成することは可能であっても、そのコピーへのポインタをI/O関数の引数として使用すると未定義動作を引き起こします。換言すれば、
std::FILE
は意味論的にコピー不可である可能性があります。
I/Oストリームは、フォーマットなしおよびフォーマット済みの入力と出力の両方に使用できます。さらに、入出力を扱う関数はロケールを考慮することも可能であり、必要に応じてワイド文字/マルチバイト変換が実行されます。
目次 |
ストリーム状態
デバイスにアクセスするために必要なシステム固有の情報(
例:
POSIXファイル記述子)に加えて、各
std::FILE
オブジェクトは直接的または間接的に以下を保持します:
- 文字幅: unset、narrow、またはwide。
- マルチバイト文字とワイド文字の変換におけるパース状態( std::mbstate_t 型のオブジェクト)
- バッファリング状態: unbuffered、line-buffered、fully buffered。
- 外部から提供されたユーザー定義バッファで置換可能なバッファ。
- I/Oモード: input、output、またはupdate(inputとoutputの両方)。
- バイナリ/テキストモード指示子。
- ファイル終端状態指示子。
- エラー状態指示子。
- std::fpos_t 型のオブジェクトとしてアクセス可能なファイル位置指示子。ワイドストリームの場合、パース状態を含む。
- (C++17) 複数スレッドがストリームの読み込み、書き込み、位置設定、位置問い合わせを行う際のデータ競合を防止するためのリエントラントロック。
ナローおよびワイド配向
新しく開かれたストリームには向きがありません。最初の std::fwide の呼び出し、または任意のI/O関数の呼び出しによって向きが確立されます:ワイドI/O関数はストリームをワイド向きにし、ナローI/O関数はストリームをナロー向きにします。一度設定されると、向きは std::freopen でのみ変更できます。ワイド向きのストリームではナローI/O関数を呼び出せません。ナロー向きのストリームではワイドI/O関数を呼び出せません。ワイドI/O関数は、ストリームによって記述される変換状態を使用して std::mbrtowc または std::wcrtomb を呼び出すかのように、ワイド文字とマルチバイト文字の間で変換を行います。プログラム内で有効なマルチバイト文字列とは異なり、ファイル内のマルチバイト文字シーケンスには埋め込まれたnull文字が含まれる可能性があり、初期シフト状態で開始または終了する必要はありません。
ワイド向きを持つストリームの変換状態は、ストリームの向きが設定される時点でインストールされているCロケールによって確立されます。
バイナリモードとテキストモード
テキストストリーム は、行を構成できる順序付けられた文字のシーケンスです。行は、0個以上の文字と終端の ' \n ' (「改行」文字)に分解できます。最終行に終端の ' \n ' が必要かどうかは実装定義です。さらに、OSにおけるテキスト表現の規約に準拠するため、入力および出力時に文字を追加、変更、または削除する必要がある場合があります(特に、Windows OS上のCストリームは、出力時に ' \n ' を ' \r \n ' に変換し、入力時に ' \r \n ' を ' \n ' に変換します)。
テキストストリームから読み込まれたデータが、以前にそのストリームに書き出されたデータと等しいと比較されることが保証されるのは、以下の各条件がすべて満たされた場合のみです:
- データは印刷可能文字および/または制御文字 ' \t ' と ' \n ' のみで構成される(特にWindows OSでは、 ' \0 x1A' 文字が入力終了を示す)。
- ' \n ' 文字の直前にスペース文字が存在しない(そのようなスペース文字は、後で入力として読み込まれる際に消失する可能性がある)。
- 最後の文字は ' \n ' である。
バイナリストリーム は、内部データを透過的に記録できる順序付けられた文字シーケンスです。バイナリストリームから読み込まれたデータは、常にそのストリームに以前書き出されたデータと等しくなりますが、実装はストリームの末尾に不定数のnull文字を追加することが許可されています。ワイドバイナリストリームは初期シフト状態で終わる必要はありません。
注記
POSIXは明示的に、現在インストールされているCロケールの
LC_CTYPE
ファセットが、ストリームの向きがワイドになった時点で
FILE
オブジェクト内に保存されることを要求しています。POSIXは、この
LC_CTYPE
ファセットが、向きが変更されるまで、その後
std::setlocale
が呼び出されたかどうかに関わらず、このストリームでの全ての将来のI/Oに使用されることを要求しています。
各テキスト行は本質的に人間が読み取り可能なデータで構成されることを意図しています。POSIX実装ではテキストストリームとバイナリストリームを区別しません( ' \n ' またはその他の文字に対する特別なマッピングは存在しません)。
関連項目
|
生デバイスを抽象化する
(クラステンプレート) |
|
|
生ファイルデバイスを実装する
(クラステンプレート) |
|
|
入力ストリームに関連付けられた
FILE
*
型の式
出力ストリームに関連付けられた FILE * 型の式 エラー出力ストリームに関連付けられた FILE * 型の式 (マクロ定数) |
|
|
Cドキュメント
for
FILE
|
|