Freigeben über


_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. ENOSPCDies 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_errlistund _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_WTEXTgeöffnet wird, der / _O_U16TEXToder _O_U8TEXTwenn sie mithilfe fopen eines Modusparameters geöffnet wird, der bzwccs=UTF-8ccs=UTF-16LE. der den Modus in einen Unicode-Übersetzungsmodus mithilfe von Daten enthältccs=UNICODE, oder wenn der Modus in _setmodeeinen 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.

Siehe auch

E/A auf niedriger Ebene
fwrite
_open, _wopen
_read
_setmode