Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

fwrite - Daten binär ausgeben

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

size_t fwrite(const void *ptr, size_t size, size_t nitems, FILE *stream);

Beschreibung

fwrite() schreibt nitems Elemente der Größe size aus dem Vektor, auf den ptr zeigt, in den Datenstrom, auf den stream zeigt. Der Lese-/Schreibzeiger des Datenstroms wird, wenn er definiert ist, um die Anzahl von Bytes erhöht, die erfolgreich geschrieben wurden. Wenn ein Fehler auftritt, ist der Wert des Lese-/Schreibzeigers unbestimmt.

Die Strukturkomponenten st_ctime und st_mtime der Datei werden zwischen der erfolgreichen Ausführung von fwrite() und der nächsten erfolgreichen Beendigung eines Aufrufs von fflush() oder fclose() für denselben Datenstrom oder einem Aufruf von exit() oder abort() für die Änderung markiert (siehe sys/stat.h).

BS2000
Satz-Ein-/Ausgabe

  • fwrite() schreibt einen Satz in die Datei.

  • Bei sequenziellen Dateien (SAM, PAM) wird der Satz an die aktuelle Dateiposition geschrieben.

  • Bei indexsequenziellen Dateien (ISAM) wird der Satz an die Position geschrieben, die dem Schlüsselwert im Satz entspricht.

  • Anzahl der auszugebenden Zeichen:

    Im folgenden sei n die Gesamtanzahl der auszugebenden Zeichen, d.h.

    n = size * nitems

    • Wenn n größer als die maximale Satzlänge ist, wird nur ein Satz mit maximaler Satzlänge geschrieben. Die restlichen Daten gehen verloren.

    • Wenn n kleiner als die minimale Satzlänge ist, wird kein Satz geschrieben. Die minimale Satzlänge ist nur für ISAM-Dateien definiert und bedeutet, dass n mindestens den Bereich des Schlüssels im Satz umfassen muss.

    • Wenn n beim Neuschreiben eines Satzes in eine Datei mit fester Satzlänge kleiner als die Satzlänge ist, wird der Satz am Ende mit binären Nullen aufgefüllt.

    • Beim Update eines bestehenden Satzes in einer sequenziellen Datei (SAM, PAM) muss n gleich der Länge des zu aktualisierenden Satzes sein. Im anderen Fall tritt ein Fehler auf. Als Satzlänge für PAM-Dateien gilt die Länge eines logischen Blocks.

    • Beim Update eines bestehenden Satzes in einer indexsequenziellen Datei (ISAM) braucht n nicht gleich der Länge des zu aktualisierenden Satzes sein. Ein Satz kann also verkürzt oder verlängert werden.

  • In ISAM-Dateien, für die Schlüsselverdoppelung zugelassen ist, ist kein direkter Update eines Satzes möglich. Beim Schreiben eines Satzes mit einem bereits existierenden Schlüssel wird stets ein neuer Satz geschrieben. Der alte Satz muss explizit gelöscht werden.

  • fwrite() liefert den gleichen Returnwert wie bei Datenstrom-Ein-/Ausgabe, nämlich die Anzahl der vollständig geschriebenen Elemente. Bei Satz-Ein-/Ausgabe ist es sinnvoll, ausschließlich die Elementlänge 1 zu verwenden, da in diesem Fall der Returnwert der Länge des geschriebenen Satzes entspricht (ohne ein ggf. vorhandenes Satzlängenfeld). Bei fester Satzlänge wird jedoch das (ggf. notwendige) Auffüllen mit binären Nullen im Returnwert nicht berücksichtigt. (Ende)

Returnwert

Anzahl der erfolgreich geschriebenen Elemente



bei Erfolg. Diese kann dann kleiner als nitems sein, wenn ein Schreibfehler auftritt.


0       

wenn size oder nitems gleich 0 sind. Der Inhalt des Vektors und der Zustand des Datenstroms bleiben unverändert.

wenn ein Schreibfehler auftritt, wird das Fehlerkennzeichen für den Datenstrom gesetzt. errno wird gesetzt, um den Fehler anzuzeigen.

Fehler

Siehe fputc() .

Hinweise

Um sicherzugehen, dass size die richtige Anzahl Bytes für ein Datenelement angibt, sollten Sie die Funktion sizeof() für die Größe einer Dateneinheit verwenden, auf die ptr zeigt.

Bei der Ausgabe in Dateien mit Datenstrom-Ein-/Ausgabe werden die Daten nicht sofort in die externe Datei geschrieben, sondern in einem C-internen Puffer zwischengespeichert (siehe Abschnitt "Pufferung von Datenströmen“).

Bei der Ausgabe in Textdateien werden die Steuerzeichen für Zwischenraum (\n, \t etc.) je nach Art der Textdatei in ihre entsprechende Wirkung umgesetzt (sieh Abschnitt "Zwischenraumzeichen“).

BS2000

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, die länger als die maximale Satzlänge sind, beim Schreiben auf die maximale Satzlänge gekürzt. Standardmäßig oder mit der Angabe split=yes werden diese Sätze in mehrere Sätze aufgeteilt. Hat ein Satz genau die maximale Satzlänge, wird nach diesem ein Satz der Länge Null geschrieben. (Ende)

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

Siehe auch

ferror(), fopen(), printf(), putc(), puts(), write(), stdio.h, sys/stat.h.