getc(3S) getc(3S)
NAME
getc, getchar, fgetc, getw - Zeichen/Wort aus Stream lesen
SYNTAX
#include <stdio.h>
int getc(FILE *stream);
int getchar(void);
int fgetc(FILE *stream);
int getw(FILE *stream);
BESCHREIBUNG
getc() gibt das nächste Zeichen (d. h. Byte) als Zeichen ohne Vorzei-
chen (unsigned char) aus der angegebenen Eingabedatei stream umgewan-
delt in eine Ganzzahl int zurück. Es setzt auch den Schreib-/Lese-
zeiger, sofern dieser definiert ist, um ein Zeichen in stream weiter.
getchar() ist als getc(stdin) definiert. getc() und getchar() sind
Makros.
fgetc() verhält sich wie getc(), ist jedoch eine Funktion und kein
Makro. fgetc() läuft langsamer als getc(), beansprucht jedoch auch
weniger Speicherplatz pro Aufruf und sein Name kann als Argument für
eine Funktion verwendet werden.
getw() liefert das nächste Wort (d. h. eine Ganzzahl) von der angege-
benen Eingabedatei stream. getw() erhöht den zugehörigen Schreib-
/Lesezeiger (sofern definiert), so daß dieser auf das nächste Wort
zeigt. Die Größe eines Wortes ist die Größe einer Zahl vom Typ int.
Sie ist bei den einzelnen Rechnern unterschiedlich. getw() setzt keine
besondere Ausrichtung in der Datei voraus.
FEHLER
Die folgenden Beschreibungen der Fehlercodes sind funktionsspezifisch.
Eine allgemeingültige Beschreibung finden Sie in introprm2(2) bzw. in
errno(5).
Die Funktionen schlagen bei folgenden Bedingungen fehl:
EAGAIN Für den Dateideskriptor von stream ist das ONONBLOCK-Flag
gesetzt, und der Prozeß wird verzögert.
EBADF Der Dateideskriptor von stream ist kein zum Lesen geöffne-
ter Dateideskriptor.
EINTR Das Lesen wurde durch den Empfang eines Signals unterbro-
chen, und es wurden keine Daten übertragen.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
getc(3S) getc(3S)
EIO Ein physischer Ein-/Ausgabefehler ist aufgetreten, oder
der Prozeß ist Teil einer Hintergrundprozeßgruppe, die
versucht, vom steuernden Terminal zu lesen. Entweder igno-
riert oder blockiert der Prozeß das SIGTTIN-Signal, oder
die Prozeßgruppe ist verwaist. Dieser Fehler kann auch aus
implementierungsabhängigen Gründen auftreten.
EOVERFLOW Die Datei ist eine reguläre Datei, und es wurde versucht,
bis hin oder über den maximalen Offset hinaus zu lesen,
der dem entsprechenden Datenstrom zugeordnet ist.
Die Funktion fgetc() kann bei folgenden Bedingungen fehlschlagen:
ENOMEM Es ist nicht genügend Speicherplatz verfügbar.
ENXIO Es liegt eine Anforderung eines nicht vorhandenen Geräts
vor, oder die Anforderung ging über die Leistungsgrenzen
des Gerätes hinaus.
ERGEBNIS
Diese Funktionen geben am Ende der Datei oder bei einem Fehler die
Konstante EOF zurück und setzen je nachdem EOF oder die Fehleranzeige
von stream. Da EOF eine gültige ganze Zahl ist, sollte zur Ermittlung
von Fehlern ferror() oder feof() verwendet werden.
HINWEISE
Wenn der von getc(), getchar() oder fgetc() zurückgegebene ganzzahlige
Wert in einer Variablen vom Typ char gespeichert und dann mit der
ganzzahligen Konstanten EOF verglichen wird, ist dieser Vergleich mög-
licherweise nie erfolgreich, weil die Vorzeichenpropagierung beim
Übergang von char zu int implementierungsabhängig ist.
Die Makroversion von getc() wertet das stream-Argument mehr als einmal
aus und könnte Nebeneffekte falsch behandeln. So arbeitet insbesondere
getc(*f++) nicht sinnvoll. Verwenden Sie statt dessen fgetc().
Wegen der möglichen Unterschiede in Wortlänge und Byteordnung sind die
unter Verwendung von putw() geschriebenen Dateien implementierungsab-
hängig und können möglicherweise nicht mit getw() auf einem anderen
Prozessor gelesen werden. Für alle oben definierten Makros gibt es
Funktionen. Um die Funktionsform zu erhalten, muß die Definition des
Makronamens rückgängig gemacht werden (d. h. #undef getc).
SIEHE AUCH
fclose(3S), ferror(3S), fopen(3S), fread(3S), gets(3S), putc(3S),
scanf(3S), stdio(3S), ungetc(3S), lfs(5), stdio(5).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98