write (C++)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu io.h - Index


Header-Datei

io.h

Kategorie

Eingabe-/Ausgaberoutinen

Prototyp

int write(int handle, void *buf, unsigned len);

Beschreibung

Schreibt in eine Datei.

write schreibt Daten aus einem Puffer in die Datei oder das Gerät, die bzw. das durch das gegebene handle bezeichnet wird. Das Argument handle enthält ein Datei-Handle, das durch einen Aufruf von creat, open, dup oder dup2 abgerufen wurde.

Diese Funktion versucht, len Bytes aus dem durch buf bezeichneten Puffer in die mit handle verknüpfte Datei zu schreiben. Es wird nicht mehr als die geforderte Anzahl von Bytes in die Datei geschrieben, sofern write nicht verwendet wird, um Daten in eine Textdatei zu schreiben. Die Funktion write kann höchstens UINT_MAX -1 Bytes schreiben, weil UINT_MAX gleichbedeutend mit -1 ist, dem Rückgabewert von write im Fehlerfall. Bei Textdateien gibt write für jedes Zeilenvorschubzeichen (LF) die Zeichenkombination CR/LF aus. UINT_MAX ist in limits.h definiert.

Wenn weniger Bytes geschrieben werden können als gefordert, sollte dies als Fehler betrachtet werden. In diesem Fall ist der Speicherplatz auf dem Datenträger wahrscheinlich erschöpft. Bei Datenträgerdateien wird stets ab der aktuellen Position des Dateizeigers geschrieben. Bei Geräten werden die Bytes direkt an das Gerät gesendet. Bei Dateien, die im Modus O_APPEND geöffnet werden, wird der Zeiger vor dem Schreibvorgang von write nicht auf das Dateiende (EOF) gesetzt.

Rückgabewert

write gibt die Anzahl der geschriebenen Bytes zurück. Bei einem Schreibvorgang in eine Textdatei werden die erzeugten Wagenrücklaufzeichen (CR) nicht gezählt. Andernfalls gibt die Funktion write -1 zurück und weist der globalen Variablen errno einen der folgenden Werte zu:

EACCES

Permission denied (Zugriff verweigert)

EBADF

Bad file number (Falsche Dateinummer)


Beispiel

#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys\stat.h>;
#include <io.h>
#include <string.h>
int main(void)
{
   int handle;
   char string[40];
   int length, res;
/*
Im aktuellen Verzeichnis die Datei TEST.$$$ erstellen und einen String in diese Datei schreiben. Wenn die Datei TEST.$$$ bereits vorhanden ist, wird sie überschrieben.
 */
   if ((handle = open("TEST.$$$", O_WRONLY | O_CREAT | O_TRUNC,
                         S_IREAD | S_IWRITE)) == -1)
   {
      printf("Error opening file.\n");
      exit(1);
   }
   strcpy(string, "Hello, world!\n");
   length = strlen(string);
   if ((res = write(handle, string, length)) != length)
   {
      printf("Error writing to the file.\n");
      exit(1);
   }
   printf("Wrote %d bytes to the file.\n", res);
   close(handle);
   return 0;
}

Portabilität

POSIX Win32 ANSI C ANSI C++

+

+