Die Ausführungen dieses Abschnitts beziehen sich auf die Funktionen, die in der Tabelle auf "Umfang der unterstützten C-Bibliothek" (Umfang der unterstützten C-Bibliothek) mit xx gekennzeichnet sind.
Die C-Bibliotheksfunktionen wurden erstmals mit C V1.0 zur Verfügung gestellt. Zu diesem Zeitpunkt gab es keinen ANSI-definierten C-Bibliotheksumfang. Die Implementierung orientierte sich an der „vorläufigen“ Definition durch Kernighan/Ritchie („KR“) bzw. an den marktüblichen UNIX-Implementierungen.
Die Anpassung der C-Bibliotheksfunktionen an den ANSI-Standard (C V2.0) führte bei der Ausführung einiger Ein-/Ausgabefunktionen zu Abweichungen gegenüber der Vorgängerversion. Um einerseits den ANSI-Standard voll zu erfüllen, andererseits das gewohnte Ablaufverhalten von „Alt“-Programmen zu gewährleisten, wurden die von den Abweichungen betroffenen Ein-/Ausgabefunktionen bei C/C++ VersionenV2.xx in zwei Varianten angeboten:
Mit der neuen „ANSI“-Funktionalität und mit der zu C V1.0 kompatiblen „KR“-Funktionalität.
Die gewünschte Funktionalität wird zum Übersetzungszeitpunkt mit folgender Compileroption ausgewählt:
SOURCE-PROPERTIES=PAR(LIBRARY-SEMANTICS=STD|V1-COMPATIBLE)
Die Auswahl der KR-Funktionalität (V1-COMPATIBLE) ist nur in den Übersetzungsmodi KR und ANSI möglich. In den Übersetzungsmodi STRICT-ANSI und CPLUSPLUS wird die Angabe V1-COMPATIBLE ignoriert und automatisch STD angenommen.
Die KR- bzw. ANSI-Funktionalität gilt für die Aufrufe aller Bibliotheksfunktionen einer Übersetzungseinheit.
Achtung
Wird in mehreren, getrennt übersetzten Quellprogrammen dieselbe Datei verarbeitet, müssen diese Quellprogramme mit dem gleichen LIBRARY-SEMANTICS-Parameter übersetzt werden!
Bei Programmentwicklungen in der POSIX-Shell kann die KR-Funktionalität nicht eingeschaltet werden, d.h. die Ein-/Ausgabefunktionen werden generell mit ANSI-Funktionalität ausgeführt.
Ab C/C++ V3.0 steht die KR-Funktionalität nicht mehr zur Verfügung.
Die Unterschiede zwischen KR- und ANSI-Funktionalität sind im Folgenden aufgeführt.
KR-Funktionalität
Standardattribute von Textdateien
Wird eine nicht vorhandene Textdatei neu angelegt, wird standardmäßig eine SAM-Datei mit variabler Satzlänge erstellt.Position des Lese-/Schreibzeigers im Anfügemodus
Wenn der Lese-/Schreibzeiger in einer Datei, die im Anfügemodus geöffnet wurde, explizit vom Dateiende wegpositioniert wurde (rewind()
,fsetpos()
,fseek()
,lseek()
), wird er nur beim Schreiben mit der Elementarfunktionwrite()
automatisch ans Ende der Datei positioniert.Wenn eine Datei im Anfügemodus und zum Lesen geöffnet wurde, ist sie nach dem Öffnen auf das Dateiende positioniert. Der alte Inhalt bereits vorhandener Dateien bleibt erhalten.
ISAM-Dateien (Pufferleerung)
Wenn die Daten einer ISAM-Datei im Puffer nicht mit einem Neue-Zeile-Zeichen enden, bewirkt das Schreiben in die externe Datei einen Satzwechsel. Nachfolgende Daten werden in einen neuen Satz geschrieben.ungetc()
Beim Schreiben des Pufferinhalts in die externe Datei werden die Originaldaten verändert, wenn an Stelle des zuvor eingelesenen Zeichens ein anderes Zeichen in den Puffer zurückgestellt wurde.Auswertung des Tabulatorzeichens (
\t
)
Bei der Ausgabe in Textdateien von FCBTYP SAM und ISAM wird das Tabulatorzeichen standardmäßig in die entsprechende Anzahl Leerzeichen umgesetzt.fprintf()
,printf()
,sprintf()
,fscanf()
,scanf()
,sscanf()
Die ANSI-Erweiterungen der Formatierungs- und Umwandlungszeichen stehen nicht zur Verfügung. Es gilt die Syntax und Semantik der Vorgängerversion.vfprintf()
,vprintf()
,vsprintf()
Das UmwandlungszeichenL
kann nicht verwendet werden, da im KR-Modus der Typlong double
nicht unterstützt wird.
ANSI-Funktionalität
Standardattribute von Textdateien
Wird eine nicht vorhandene Textdatei neu angelegt, wird standardmäßig eine ISAM-Datei mit variabler Satzlänge erstellt.Position des Lese-/Schreibzeigers im Anfügemodus
Wenn eine Datei, die im Anfügemodus geöffnet wurde, explizit vom Dateiende wegpositioniert wurde (rewind()
,fsetpos()
,fseek()
,lseek()
), wird der aktuelle Lese/Schreibzeiger bei allen Schreibfunktionen ignoriert und automatisch an das Ende der Datei positioniert.Wenn eine Datei im Anfügemodus und zum Lesen geöffnet wurde, ist sie nach dem Öffnen auf Dateianfang positioniert. Der alte Inhalt bereits vorhandener Dateien bleibt erhalten.
ISAM-Dateien (Pufferleerung)
Wenn die Daten einer ISAM-Datei im Puffer nicht mit einem Neue-Zeile-Zeichen enden, bewirkt das Schreiben in die externe Datei keinen Satzwechsel. Nachfolgende Daten verlängern den Satz in der Datei. Beim Lesen einer ISAM-Datei werden daher nur Neue-Zeile-Zeichen eingelesen, die vom Programm explizit geschrieben wurden.Wenn das Lesen aus einer beliebigen Textdatei eine Datenübertragung von der externen Datei in den C-internen Puffer notwendig macht, werden die noch in Puffern zwischengespeicherten Daten aller ISAM-Dateien automatisch in die Dateien hinausgeschrieben.
ungetc()
Beim Schreiben des Pufferinhalts in die externe Datei werden die Originaldaten nicht verändert, wenn an Stelle des zuvor eingelesenen Zeichens ein anderes Zeichen in den Puffer zurückgestellt wurde. Es werden stets die Originaldaten vor demungetc
-Aufruf in die externe Datei geschrieben.Auswertung des Tabulatorzeichens (
\t
)
Bei der Ausgabe in Textdateien von FCBTYP SAM und ISAM wird das Tabulatorzeichen standardmäßig nicht in die entsprechende Anzahl Leerzeichen umgesetzt, sondern als Textzeichen (EBCDIC-Wert) in die Datei geschrieben.