Byte e fluxos largos

Um fluxo de bytes trata um arquivo como uma sequência de bytes. Dentro do programa, o fluxo é a sequência idêntica de bytes.

Por outro lado, um fluxo largo trata um arquivo como uma sequência de caracteres de vários bytes generalizados, que pode ter uma ampla gama de regras de codificação. (Arquivos binários e de texto ainda são lidos e gravados conforme descrito anteriormente.) Dentro do programa, o fluxo se parece com a sequência correspondente de caracteres largos. Conversões entre as duas representações ocorrem dentro da biblioteca C padrão. As regras de conversão podem, em princípio, ser alteradas por uma chamada para setlocale que altera a categoria LC_CTYPE. Cada fluxo amplo determina suas regras de conversão no momento em que se torna amplo e mantém essas regras mesmo que a categoria LC_CTYPE mude posteriormente.

O posicionamento em um fluxo amplo sofre as mesmas limitações dos fluxos de texto. Além disso, o indicador de posição do arquivo também pode precisar lidar com uma codificação dependente de estado. Normalmente, inclui deslocamento de byte dentro do fluxo e um objeto do tipo mbstate_t. Portanto, a única maneira confiável de obter uma posição de arquivo em um fluxo amplo é chamando fgetpos, e a única maneira confiável de restaurar uma posição obtida dessa forma é chamando fsetpos.

Confira também

Arquivos e fluxos
setlocale, _wsetlocale