Your Browser is not longer supported

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

{{viewport.spaceProperty.prod}}

write - In eine Datei schreiben (elementar)

&pagelevel(4)&pagelevel

Definition

#include <stdio.h>

int write(int dk, const char *puf, int anz);

write ist die elementare Schreiboperation.

write schreibt bis zu anz zusammenhängende Bytes aus dem Bereich, auf den puf zeigt, in die Datei mit Dateikennzahl dk.

SAM-Dateien werden mit elementaren Funktionen stets als Textdateien verarbeitet.

Parameter

int dk

Dateikennzahl der Ausgabedatei.

Eine Dateikennzahl (positive ganze Zahl) ist das Ergebnis eines erfolgreichen Aufrufs von open/open64 oder creat/creat64. Die Dateikennzahlen für stdin (0), stdout (1) und stderr (2) sind nach Programmstart automatisch zugeordnet.

const char *puf

Zeiger auf den Bereich, in dem die Daten stehen, die in die Ausgabedatei geschrieben werden sollen.

int anz

Anzahl der Bytes, die in die Datei geschrieben werden sollen. Es ist nicht sichergestellt, dass write tatsächlich anz Bytes schreibt!

Returnwert

Anzahl der tatsächlich geschriebenen Bytes, bei Erfolg.

 

-1

write hat nichts geschrieben, weil einer der folgenden Fehler vorliegt:

  • physikalischer Ein-/Ausgabefehler

  • dk ist keine gültige Dateikennzahl

  • die Datei ist nicht vorhanden

  • es besteht kein Zugriffsrecht bzw. keine Schreiberlaubnis für die Datei

  • der Bereich, in dem die Daten stehen, ist nicht korrekt angegeben

Hinweise

Sie sollten nach jedem write-Aufruf die Anzahl der tatsächlich geschriebenen Bytes überprüfen.
Ist das Ergebnis kleiner als die Angabe in anz, liegt im Allgemeinen ein Fehler vor.
Ist das Ergebnis größer als die Angabe in anz, wurden Tabulatorzeichen (\t) in eine Textdatei geschrieben. Tabulatorzeichen werden dabei in die entsprechenden Leerzeichen umgesetzt und bei der Ergebnisanzahl berücksichtigt.

Um sicherzugehen, dass Ihre Angabe in anz die Größe des Puffers nicht überschreitet, sollten Sie die Funktion sizeof verwenden.

Die Daten werden nicht sofort in die externe Datei geschrieben, sondern in einem C-internen Puffer zwischengespeichert (siehe Abschnitt "Pufferung“ (Grundbegriffe)).

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

Bei Textdateien mit der Zugriffsart SAM und variabler Satzlänge, für die zusätzlich eine maximale Satzlänge angegeben ist, gilt: Wenn bei open die Angabe O_NOSPLIT gemacht wurde, werden Sätze, die länger als die maximale Satzlänge sind, beim Schreiben mit write  auf die maximale Satzlänge gekürzt. Standardmäßig (also ohne die Angabe O_NOSPLIT) 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.

Bei Dateien mit satzorientierter Ein-/Ausgabe (Satz-E/A), d.h. wenn bei open die Angabe O_RECORD gemacht wurde, schreibt die Funktion write einen Satz in die Datei. Bei SAM- und PAM-Dateien wird der Satz an die aktuelle Dateiposition geschrieben. Bei ISAM-Dateien wird der Satz an die Position geschrieben, die dem Schlüsselwert im Satz entspricht. Ist die Anzahl n der zu schreibenden Zeichen größer als die maximale Satzlänge, wird nur ein Satz mit maximaler Satzlänge geschrieben. Die restlichen Daten gehen verloren.
Bei ISAM-Dateien wird ein Satz nur geschrieben, wenn er mindestens einen vollständigen Schlüssel enthält. Ist bei Dateien mit fester Satzlänge n kleiner als die Satzlänge, wird mit binären Nullen aufgefüllt.

Beispiel

Folgendes Programm kopiert die Standardeingabe (Dateikennzahl 0) auf die Standardausgabe (Dateikennzahl 1). Wenn Sie den Umlenkmechanismus ausnützen, können Sie damit von einer beliebigen Quelle auf ein beliebiges Ziel kopieren. BUFSIZ (8192 Bytes) ist in der Include-Datei <stdio.h> definiert.

#include <stdio.h>
int main(void)
{
  char buf[BUFSIZ];
  int n;
  while((n = read(0, buf, sizeof(buf))) > 0)
        write(1, buf, n);
  return 0;
}

Siehe auch

read, open, open64, creat, creat64