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