_rtl_write
Nach oben zu io.h - Index
Header-Datei
io.h
Kategorie
Eingabe-/Ausgaberoutinen
Prototyp
int _rtl_write(int handle, void *buf, unsigned len);
Beschreibung
Schreibt in eine Datei.
Anmerkung: Diese Funktion ersetzt die Funktion _write, die veraltet ist.
_rtl_write versucht, len Bytes aus dem durch buf bezeichneten Puffer in die mit handle verknüpfte Datei zu schreiben.
Die Funktion _rtl_write kann höchstens UINT_MAX -1 Bytes schreiben (weil UINT_MAX gleichbedeutend mit -1 ist, dem Rückgabewert von _rtl_write im Fehlerfall). UINT_MAX ist in limits.h definiert. Die Funktion _rtl_write übersetzt Zeilenvorschubzeichen (LF) nicht durch die CR/LF-Kombination, weil sie alle Dateien im Binärmodus öffnet.
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 nicht auf das Dateiende (EOF) gesetzt.
Rückgabewert
Bei erfolgreicher Ausführung gibt _rtl_write gibt die Anzahl geschriebener Bytes zurück.
Andernfalls gibt die Funktion -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 <io.h>
#include <alloc.h>
#include <fcntl.h>
#include <process.h>
#include <sys\stat.h>;
int main(void)
{
void *buf;
int handle, bytes;
buf = malloc(200);
/*
Im aktuellen Verzeichnis die Datei TEST.$$$ erstellen und 200 Bytes in diese Datei schreiben. Wenn die Datei TEST.$$$ bereits vorhanden ist, wird sie überschrieben.
*/
if ((handle = open("TEST.$$$", O_CREAT | O_WRONLY | O_BINARY,
S_IWRITE | S_IREAD)) == -1)
{
printf("Error Opening File\n");
exit(1);
}
if ((bytes = _rtl_write(handle, buf, 200)) == -1) {
printf("Write Failed.\n");
exit(1);
}
printf("_rtl_write: %d bytes written.\n",bytes);
return 0;
}
Portabilität
POSIX | Win32 | ANSI C | ANSI C++ |
---|---|---|---|
+ |