Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

ungetc - Byte in Eingabestrom zurückstellen

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int ungetc(int c, FILE *stream);

Beschreibung

ungetc() wandelt das vorher gelesene Byte c in den Typ unsigned char um und stellt das entsprechende Byte in den Datenstrom zurück, auf den stream zeigt. Die zurückgestellten Bytes werden durch nachfolgende Leseoperationen aus diesem Datenstrom in umgekehrter Reihenfolge zurückgegeben. Wenn zwischendurch eine Funktion zur Positionierung (fseek(), fsetpos() oder rewind()) für denselben Datenstrom erfolgreich aufgerufen wird, werden die zurückgestellten Bytes aus dem Datenstrom gelöscht. Der externe Speicher, der dem Datenstrom zugeordnet ist, bleibt unverändert.

BS2000
Der Aufruf einer der folgenden Funktionen hebt die Effekte des ungetc-Aufrufs (z.B. Rückwärtspositionierung) auf: fseek(), fsetpos(), lseek(), rewind(), fflush(). (Ende)

Das Zurückstellen genau eines Bytes ist garantiert. Wenn ungetc() zu oft für denselben Datenstrom aufgerufen wird, ohne dass zwischendurch eine Leseoperation oder ein Positionieren stattfindet, kann das Zurückstellen fehlschlagen. Im C-Laufzeitsystem können maximal {BUFSIZE} Zeichen zurückgestellt werden (siehe stdio.h).

Wenn der Wert von c gleich der Konstanten EOF ist, schlägt das Zurückstellen fehl und der Eingabestrom bleibt unverändert.

Ein erfolgreicher ungetc-Aufruf löscht das Dateiendekennzeichen für diesen Datenstrom. Der Wert des Lese-/Schreibzeigers für den Datenstrom ist nach einem Lesen oder Verwerfen aller zurückgestellten Bytes derselbe wie vor dem Zurückstellen der Bytes. Der Lese-/Schreibzeiger wird durch jeden erfolgreichen ungetc-Aufruf erniedrigt. Wenn sein Wert vor einem Aufruf gleich 0 ist, ist sein Wert nach dem Aufruf unbestimmt.

 

zurückgestelltes Byte

 


bei Erfolg.


EOF

wenn c gleich EOF ist, oder bei Fehler.

Hinweise

Es muss immer wenigstens ein Byte vor dem ersten ungetc-Aufruf aus der Datei gelesen worden sein.

Ob ungetc() für eine BS2000- oder eine POSIX-Datei ausgeführt wird, hängt von der Programmumgebung ab.

BS2000
Wenn beim Zugriff auf BS2000-Dateien an Stelle des zuvor eingelesenen Bytes ein anderes Byte in den Puffer zurückgestellt wurde, ist das Verhalten je nach KR- oder ANSI-Funktionalität unterschiedlich:

  • Bei KR-Funktionalität (nur bei C/C++ Versionen kleiner V3 vorhanden) werden beim Schreiben des Pufferinhalts in die externe Datei Originaldaten verändert.

  • Bei ANSI-Funktionalität werden beim Schreiben des Pufferinhalts in die externe Datei Originaldaten nicht verändert, d.h., es werden stets die Originaldaten vor dem ungetc-Aufruf in die externe Datei geschrieben. (Ende)

Siehe auch

fseek(), getc(), fsetpos(), read(), rewind(), setbuf(), stdio.h.