A byte stream treats a file as a sequence of bytes. Within the program, the stream looks like the same sequence of bytes, except for the possible alterations described above.
By contrast, a wide stream treats a file as a sequence of generalized multibyte characters, which can have a broad
range of encoding rules. (Text and binary files are still read and written as described above.) Within the program, the
stream looks like the corresponding sequence of wide characters. Conversions between the two representations occur
within the Standard C library. The conversion rules can, in principle, be altered by a call to setlocale
that changes the
category LC_CTYPE
. Each wide stream determines its conversion rules at the time it becomes wide-oriented, and retains
these rules even if the category LC_CTYPE
subsequently changes.
Positioning within a wide stream is subject to the same limitations as for text streams. Moreover, the file-position indicator
may well have to deal with a state-dependent encoding. Typically, it includes both a byte offset within the stream and an
object of type mbstate_t
. Thus, the only reliable way to obtain a file position within a wide stream is by calling
fgetpos
, and the only reliable way to restore a position obtained this way is by calling fsetpos
.