Bytestreams und weite Streams
Ein Bytestream verarbeitet eine Datei als Bytesequenz. Innerhalb des Programms weist der Stream die identische Sequenz von Bytes auf.
Im Gegensatz dazu verarbeitet ein weiter Stream eine Datei als Sequenz von generalisierten Multibytezeichen, die eine große Bandbreite an Codierungsregeln mit sich bringen können. (Text- und Binärdateien werden weiterhin wie zuvor beschrieben gelesen und geschrieben.) Innerhalb des Programms sieht der Stream wie die entsprechende Breitzeichensequenz aus. Konvertierungen zwischen den beiden Darstellungen erfolgen innerhalb der C-Standardbibliothek. Die Konvertierungsregeln können grundsätzlich durch einen Aufruf von setlocale
geändert werden, mit dem die Kategorie LC_CTYPE
geändert wird. Jeder weite Datenstrom bestimmt die Konvertierungsregeln zu dem Zeitpunkt, an dem er weit ausgerichtet wird, und er behält diese Regeln auch dann bei, wenn anschließend die Kategorie LC_CTYPE
geändert wird.
Für die Positionierung in einem weiten Datenstrom gelten dieselben Einschränkungen wie für Textdatenströme. Darüber hinaus muss der Dateipositionszeiger eventuell auch eine statusabhängige Codierung verarbeiten. Diese enthält in der Regel einen Byteoffset innerhalb des Streams und ein Objekt vom Typ mbstate_t
. Daher ist das Aufrufen von fgetpos
die einzig zuverlässige Möglichkeit, um eine Dateiposition in einem weiten Datenstrom zu ermitteln. Die zuverlässige Möglichkeit, um eine auf diese Weise ermittelte Position wiederherzustellen, bietet ein Aufruf von fsetpos
.