Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

fgetc - Byte aus Datenstrom lesen

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int fgetc(FILE *stream);

Beschreibung

fgetc() liest das nächste vorhandene Byte vom Typ unsigned char aus dem Datenstrom, auf den stream zeigt, wandelt es in den Typ int um und schaltet den zum Datenstrom gehörigen Lese-/Schreibzeiger, sofern er definiert ist, entsprechend weiter.

fgetc() kann die Strukturkomponente st_atime für die Datei, der stream zugeordnet ist, zum Ändern markieren (siehe sys/stat.h). Die Strukturkomponente st_atime wird aktualisiert, sobald fgetc(), fgets(), fgetwc(), fgetws(), fread(), fscanf(), getc(), getchar(), gets() oder scanf() erfolgreich für stream aufgerufen werden und Daten zurückliefern, die nicht durch einen vorangegangenen Aufruf von ungetc() oder ungetwc() bereitgestellt wurden.

Returnwert

nächstes Zeichen aus dem Eingabestrom, auf den stream zeigt



bei erfolgreicher Beendigung.


EOF

wenn der Datenstrom das Dateiende erreicht hat. Das Dateiendekennzeichen des Datenstroms wird gesetzt.


EOF

wenn ein Lesefehler auftritt. Das Fehlerkennzeichen des Datenstroms wird gesetzt. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

fgetc() schlägt fehl, wenn gilt:


EAGAIN

Das Flag O_NONBLOCK wird für den Dateideskriptor gesetzt, der stream zu Grunde liegt, und der Prozess würde durch fgetwc() angehalten werden.


EBADF

Der stream zu Grunde liegende Dateideskriptor ist kein gültiger, zum Lesen geöffneter Dateideskriptor.


EINTR

Die Leseoperation wurde durch den Empfang eines Signals beendet. Es wurden keine Daten übertragen.


EIO

Ein physikalischer Ein-/Ausgabefehler ist aufgetreten,oder der Prozess ist Mitglied einer Hintergrund-Prozessgruppe und versucht von seinem steuernden Terminal zu lesen. Das Signal SIGTTIN wird vom Prozess entweder blockiert oder ignoriert, oder die Prozessgruppe ist verwaist.

Hinweise

Wenn der ganzzahlige Returnwert von fgetc() in einer Variablen vom Typ char abgelegt und dann mit der ganzzahligen Konstante EOF verglichen wird, kann es sein, dass dieser Vergleich nicht erfolgreich ist, da die Vorzeichen-Erweiterung eines Zeichens bei der Umwandlung in eine Ganzzahl rechnerabhängig ist. Daher sollte eine portable Anwendung immer eine int-Variable für das Ergebnis von fgetc() verwenden.

Wenn zwischen einer Fehlerbedingung und einer Dateiendebedingung unterschieden werden soll, müssen ferror() oder feof() verwendet werden.

Wenn in einem Programm der folgende Vergleich verwendet wird, muss die Variable c als int-Größe vereinbart werden:

while((c = fgetc(dz)) != EOF)

Wenn nämlich c als char-Größe definiert werden würde, würde die Bedingung EOF aus folgendem Grund nie erfüllt: -1 wird in den char-Wert 0xFF (also +255) konvertiert. EOF ist jedoch -1.

Wenn fgetc() in der POSIX-Umgebung von stdin liest und EOF das Einlese-Endekriterium ist, erreicht man die EOF-Bedingung durch folgende Maßnahmen: 

> am blockorientierten Terminal durch Eingabe der Tastensequenz [@][@][d]

> am zeichenorientierten Terminal durch Eingabe von [CTRL]+[D]

BS2000
Wenn fgetc() in der BS2000-Umgebung von stdin liest und EOF das Einlese-Endekriterium ist, erreicht man die EOF-Bedingung durch folgende Maßnahmen am Terminal:

  1. [K2] drücken.

  2. Die Systemkommandos EOF und RESUME-PROGRAM eingeben.

Bei Textdateien mit der Zugriffsart SAM und variabler Satzlänge, für die zusätzlich eine maximale Satzlänge angegeben ist, gilt: Wenn bei fopen() die Angabe split=no gemacht wurde, werden Sätze maximaler Länge beim Lesen nicht mit dem darauffolgenden Satz verkettet. Standardmäßig oder mit der Angabe split=yes wird beim Lesen eines Satzes mit maximaler Satzlänge angenommen, dass es sich bei dem Folgesatz um die Fortsetzung dieses Satzes handelt, und die Sätze werden verkettet.

Bei Textdateien mit der Zugriffsart SAM oder ISAM liefert fgetc() am Ende eines Satzes ein zusätzliches Neue-Zeile Zeichen ('\n'). In diesem Fall liefert ein anschließender Aufruf von _fnlinserted() einen Wert ungleich 0. In allen anderen Fällen liefert ein anschließender Aufruf von _fnlinserted() den Wert 0.(Ende)

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

Siehe auch

feof(), ferror(), _fnlinserted(), fopen(), getchar, getc(), stdio.h, sys/stat.h.