Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

fflush - Dateipuffer bereinigen

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int fflush(FILE *dz);

fflush leert den Puffer der Datei mit Dateizeiger dz und schreibt alle Daten, die in dem Puffer zwischengespeichert waren, in diese Datei. Ist dz ein NULL-Zeiger, führt fflush diese Tätigkeiten für alle geöffneten Dateien durch.

Returnwert

0

fflush hat den Puffer geleert, oder es brauchte kein Puffer geleert zu werden, weil

  • der Puffer noch nicht existiert (für die Datei ist noch keine Schreibfunktion ausgeführt) oder

  • die Datei eine Eingabe- oder INCORE-Datei ist.

 

EOF

fflush hat den Puffer nicht geleert, weil

  • der Zeiger dz keiner Datei zugeordnet ist (z.B. weil die Datei bereits geschlossen ist) oder

  • die zwischengepufferten Daten nicht übertragen werden konnten.

Hinweise

Bei allen Standard-Ausgabefunktionen, die Daten in eine Datei schreiben (printf, putc, fwrite etc.), werden die Daten in einem C-internen Puffer zwischengespeichert und erst in die Datei geschrieben, wenn eines der folgenden Ereignisse eintritt (siehe auch Abschnitt „Pufferung“ (Grundbegriffe)). Die Zwischenpufferung entfällt bei Ausgaben in Zeichenketten (sprintf) und in INCORE-Dateien:

  • Ein Neue-Zeile-Zeichen (\n) wird erkannt (nur bei Textdateien),

  • die maximale Satzlänge einer Plattendatei ist erreicht,

  • bei Datensichtstationen: nach einer Ausgabe auf die Datensichtstation folgt eine Eingabe von der Datensichtstation,

  • die Funktionen fseek/fseek64, fsetpos/fsetpos64, rewind oder fflush werden aufgerufen,

  • die Datei wird geschlossen.

  • Zusätzlich nur bei ANSI-Funktionalität: 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.

Auch wenn die Daten im Puffer nicht mit einem Neue-Zeile-Zeichen enden, bewirkt fflush in einer Textdatei einen Zeilenwechsel. Nachfolgende Daten werden in eine neue Zeile (bzw. in einen neuen Satz) geschrieben.

Ausnahme bei ANSI-Funktionalität: Wenn die Daten einer ISAM-Datei im Puffer nicht mit einem Neue-Zeile-Zeichen enden, bewirkt fflush keinen Zeilenwechsel (bzw. 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.

fflush wird intern automatisch ausgeführt, wenn eine Datei geschlossen wird (fclose, close) oder wenn ein Programm normal bzw. mit exit beendet wird.

fflush kann dazu benutzt werden, die Ausgabe von Daten während des Programmablaufs zu steuern, z.B. um diverse Eingaben zu einer einzigen Ausgabe zu verketten und zu einem selbst definierten Zeitpunkt auf einmal auszugeben (siehe auch Beispiel).

Satz-E/A

Der Aufruf von fflush wird zwar nicht mit Fehler abgewiesen, bleibt jedoch ohne Wirkung.
Bei Dateien mit Satz-E/A werden keine Daten zwischengepuffert.

Beispiel

Folgendes Programm liest von stdin alphabetisch sortierte Namen ein und gibt sie in eine Datei aus. Namen mit demselben Anfangsbuchstaben sollen, jeweils durch ein Leerzeichen getrennt, in denselben Satz der Datei geschrieben werden. Das erwünschte Ergebnis erhält man bei „ANSI“-Funktionalität nur bei der Ausgabe in SAM-Dateien. Bei ISAM-Dateien werden alle Namen in einen Satz geschrieben, da fflush keinen Satzwechsel bewirkt.

#include <stdio.h>
int main(void)
{
  FILE *fp;
  char name[20];
  char prevname;
  prevname = '%';
  fp = fopen ("link=link", "w");
  while (gets(name))
  {
    if(prevname != name[0])
       fflush(fp);
    else
       fputc(' ', fp);
    fputs(name, fp);
    prevname = name[0];
  };
  fclose(fp);
  return 0;
}

Siehe auch

exit, close, fclose