Partager via


_write

Écrit des données dans un fichier.

Syntaxe

int _write(
   int fd,
   const void *buffer,
   unsigned int count
);

Paramètres

fd
Descripteur de fichier pour le fichier dans lequel les données sont écrites.

buffer
Données à écrire.

count
Nombre d'octets.

Valeur retournée

Si elle réussit, _write retourne le nombre d’octets écrits. Si l’espace réel restant sur le disque est inférieur à la taille de la mémoire tampon, la fonction tente d’écrire sur le disque, _write échoue et ne vide pas le contenu de la mémoire tampon sur le disque. Une valeur de retour de -1 indique une erreur. Si des paramètres non valides sont passés, cette fonction appelle le gestionnaire de paramètres non valide, comme décrit dans la validation des paramètres. Si l’exécution est autorisée à continuer, la fonction retourne -1 et errno est définie sur l’une des trois valeurs suivantes : EBADF, ce qui signifie que le descripteur de fichier n’est pas valide ou que le fichier n’est pas ouvert pour l’écriture ; ENOSPCce qui signifie qu’il n’y a pas suffisamment d’espace restant sur l’appareil pour l’opération ; ou EINVAL, ce qui signifie qu’il buffer s’agissait d’un pointeur Null ou qu’une probabilité count d’octets a été passée en mode Unicode.

Pour plus d’informations sur ces codes de retour et d’autres codes de retour, consultez , , _sys_errlist_doserrnoet _sys_nerr.errno

Si le fichier est ouvert en mode texte, chaque caractère de flux de ligne est remplacé par une paire de flux de retour chariot dans la sortie. Le remplacement n’affecte pas la valeur de retour.

Lorsque le fichier est ouvert en mode de traduction Unicode( par exemple, s’il fd est ouvert à l’aide _open ou _sopen à un paramètre de mode qui inclut _O_WTEXT, _O_U16TEXTou , ou _O_U8TEXTs’il est ouvert à l’aide fopen et un paramètre de mode qui inclut ccs=UNICODE, ccs=UTF-16LEou , ou ccs=UTF-8si le mode est remplacé par un mode de traduction Unicode à l’aide _setmodede –buffer est interprété comme un pointeur vers un tableau de données qui contient des wchar_tUTF-16 données. Toute tentative d'écriture d'une quantité impaire d'octets dans ce mode provoque une erreur de validation de paramètre.

Notes

La fonction _write écrit des octets count de buffer vers le fichier associé à fd. L'opération d'écriture commence à la position actuelle du pointeur de fichier (le cas échéant) associé au fichier donné. Si le fichier est ouvert pour ajout, l'opération commence à la fin actuelle du fichier. Après l’opération d’écriture, le pointeur de fichier est augmenté par le nombre d’octets écrits.

Lorsqu’il écrit dans des fichiers ouverts en mode texte, _write traite un caractère Ctrl+Z comme la fin logique du fichier. Lorsqu’il écrit sur un appareil, _write traite un caractère Ctrl+Z dans la mémoire tampon comme un terminateur de sortie.

Par défaut, l’état global de cette fonction est limité à l’application. Pour modifier ce comportement, consultez État global dans le CRT.

Spécifications

Routine En-tête requis
_write <io.h>

Pour plus d’informations sur la compatibilité, consultez Compatibility.

Exemple

// 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.

Voir aussi

E/S de bas niveau
fwrite
_open, _wopen
_read
_setmode