Bajtové a široké streamy
Bajtový datový proud považuje soubor za posloupnost bajtů. V rámci programu je stream identickou sekvencí bajtů.
Naproti tomu široký datový proud považuje soubor za posloupnost zobecněných vícebajtových znaků, které můžou mít širokou škálu pravidel kódování. (Textové a binární soubory se stále čtou a zapisují podle předchozího popisu.) V rámci programu datový proud vypadá jako odpovídající posloupnost širokých znaků. Převody mezi těmito dvěma reprezentacemi probíhají v rámci standardní knihovny jazyka C. Pravidla převodu mohou být v zásadě změněna voláním setlocale
, které mění kategorii LC_CTYPE
. Každý široký datový proud určuje pravidla převodu v době, kdy se zorientuje, a zachová tato pravidla i v případě, že se kategorie LC_CTYPE
později změní.
Umístění v rámci širokého datového proudu má stejná omezení jako u textových datových proudů. Kromě toho může být indikátor pozice souboru dobře muset řešit kódování závislé na stavu. Obvykle zahrnuje posun bajtů v rámci datového proudu i objekt typu mbstate_t
. Jediný spolehlivý způsob, jak získat pozici souboru v rámci širokého datového proudu je voláním fgetpos
, a jediný spolehlivý způsob, jak obnovit pozici získanou tímto způsobem je voláním fsetpos
.