バイト ストリームとワイド ストリーム
バイト ストリームはバイトのシーケンスとしてファイルを扱います。 プログラム内で、ストリームは、同じバイトのシーケンスです。
これに対しワイド ストリームは、さまざまなエンコードの規則を持つことができる、汎用のマルチバイト文字のシーケンスとしてファイルを扱います。 (テキスト ファイルとバイナリ ファイルは、それでも、既に説明したように読み取りと書き込みが行われます。)プログラム内で、ストリームは、対応するワイド文字のシーケンスのように見えます。 2 つの表現の間の変換は、標準 C ライブラリ内で行われます。 変換ルールは、原則として、カテゴリ LC_CTYPE
を変更する setlocale
の呼び出しによって変更できます。 各ワイド ストリームでは、ワイド指向になるときにその変換規則が決定され、カテゴリ LC_CTYPE
がその後変更されてもこれらの規則が保持されます。
ワイド ストリーム内の位置決めは、テキスト ストリームと同じ制約を受けます。 さらに、ファイル位置インジケーターで状態依存のエンコードに対処する必要が生じることもあります。 通常は、ストリーム内のバイト オフセットと mbstate_t
型のオブジェクトの両方が含まれます。 したがって、ワイド ストリーム内のファイル位置を取得する唯一の信頼できる方法は、fgetpos
を呼び出すことであり、この方法で取得した位置を元に戻すの信頼できる方法は、fsetpos
を呼び出すことです。