_write
Schreibt Daten in eine Datei.
Syntax
int _write(
int fd,
const void *buffer,
unsigned int count
);
Parameter
fd
Dateideskriptor der Datei, in die die Daten geschrieben werden.
buffer
Zu schreibende Daten.
count
Die Anzahl von Bytes.
Rückgabewert
Gibt bei erfolgreicher Ausführung _write
die Anzahl der geschriebenen Bytes zurück. Wenn der tatsächliche Speicherplatz auf dem Datenträger kleiner als die Größe des Puffers ist, schlägt die Funktion auf den Datenträger fehl und _write
löscht keinen Inhalt des Puffers auf den Datenträger. Ein Rückgabewert von -1 zeigt einen Fehler an. Wenn ungültige Parameter übergeben werden, ruft diese Funktion den ungültigen Parameterhandler auf, wie in der Parameterüberprüfung beschrieben. Wenn die Ausführung fortgesetzt werden darf, gibt die Funktion -1 zurück und errno
wird auf einen von drei Werten festgelegt: EBADF
, das bedeutet, dass der Dateideskriptor ungültig ist oder die Datei nicht zum Schreiben geöffnet wird. ENOSPC
Dies bedeutet, dass nicht genügend Speicherplatz auf dem Gerät für den Vorgang vorhanden ist; oder EINVAL
, was bedeutet, dass buffer
es sich um einen NULL-Zeiger handelte oder dass eine Ungerade count
von Bytes im Unicode-Modus übergeben wurde.
Weitere Informationen zu diesen und anderen Rückgabecodes finden Sie unter , , _doserrno
, _sys_errlist
und _sys_nerr
.errno
Wenn die Datei im Textmodus geöffnet wird, wird jedes Zeilenvorschubzeichen durch ein Wagenrücklaufzeilenvorschubpaar in der Ausgabe ersetzt. Der Ersatz wirkt sich nicht auf den Rückgabewert aus.
Wenn die Datei im Unicode-Übersetzungsmodus geöffnet wird , z. B. wenn sie mit _open
einem Oder oder _sopen
einem Modusparameter _O_WTEXT
geöffnet wird, der / _O_U16TEXT
oder _O_U8TEXT
wenn sie mithilfe fopen
eines Modusparameters geöffnet wird, der bzwccs=UTF-8
ccs=UTF-16LE
. der den Modus in einen Unicode-Übersetzungsmodus mithilfe von Daten enthältccs=UNICODE
, oder wenn der Modus in _setmode
einen Unicode-Übersetzungsmodus geändert wird,buffer
wird als Zeiger auf ein Array mit UTF-16
wchar_t
Daten interpretiert.fd
Der Versuch, in diesem Modus eine ungerade Anzahl von Bytes zu schreiben, führt zu einem Parametervalidierungsfehler.
Hinweise
Die _write
-Funktion schreibt count
Bytes aus dem buffer
in die mit fd
verknüpfte Datei. Der Schreibvorgang beginnt an der aktuellen Position des Dateizeigers (falls vorhanden) für die betreffende Datei. Wenn die Datei zum Anhängen geöffnet ist, beginnt der Vorgang am aktuellen Dateiende. Nach dem Schreibvorgang wird der Dateizeiger um die Anzahl der geschriebenen Bytes erhöht.
Wenn sie in Dateien schreibt, die im Textmodus geöffnet werden, _write
wird ein STRG+Z-Zeichen als logisches Ende der Datei behandelt. Wenn es auf ein Gerät schreibt, _write
wird ein STRG+Z-Zeichen im Puffer als Ausgabeterminator behandelt.
Standardmäßig gilt der globale Zustand dieser Funktion für die Anwendung. Wie Sie dieses Verhalten ändern, erfahren Sie unter Globaler Status in der CRT.
Anforderungen
Routine | Erforderlicher Header |
---|---|
_write |
<io.h> |
Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.
Beispiel
// crt__write.c
//
// This program opens a file for output and uses _write to write
// some bytes to the file.
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
#include <share.h>
char buffer[] = "This is a test of '_write' function";
int main( void )
{
int fileHandle = 0;
unsigned bytesWritten = 0;
if ( _sopen_s(&fileHandle, "write.o", _O_RDWR | _O_CREAT,
_SH_DENYNO, _S_IREAD | _S_IWRITE) )
return -1;
if (( bytesWritten = _write( fileHandle, buffer, sizeof( buffer ))) == -1 )
{
switch(errno)
{
case EBADF:
perror("Bad file descriptor!");
break;
case ENOSPC:
perror("No space left on device!");
break;
case EINVAL:
perror("Invalid parameter: buffer was NULL!");
break;
default:
// An unrelated error occurred
perror("Unexpected error!");
}
}
else
{
printf_s( "Wrote %u bytes to file.\n", bytesWritten );
}
_close( fileHandle );
}
Wrote 36 bytes to file.