字节和宽流
字节流将文件视作一个字节序列。 在程序中,字节流是相同的字节序列。
相比之下,宽流将文件视作一个通用的多字节字符序列,可以具有广泛的编码规则。 (文本和二进制文件仍按前面所述读取和写入。)在程序中,流看起来像是相应的宽字符序列。 两种表示形式之间的转换发生在标准 C 库中。 原则上,转换规则可以通过调用更改类别 LC_CTYPE
的 setlocale
进行更改。 每个宽流在其变为面向宽度时确定其转换规则,并且即使类别 LC_CTYPE
稍后发生更改也会保留这些规则。
在宽流中进行定位会受到与文本流相同的限制。 此外,文件位置指示器可能必须处理依赖于状态的编码。 通常,它包含流内的字节偏移量和 mbstate_t
类型的对象。 因此,获取宽流中的文件位置的唯一可靠方法是调用 fgetpos
,并且还原以这种方法获得的位置的唯一可靠方法是调用 fsetpos
。