Partager via


_write

Écrit des données dans un fichier.

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 de retour

S'il aboutit, _write retourne le nombre d'octets réellement écrits. Si l'espace effectif restant sur le disque est inférieur à la taille de la mémoire tampon que la fonction essaie d'écrire sur le disque, _write échoue et le contenu de la mémoire tampon n'est pas vidé sur le disque. Une valeur de retour égale à –1 indique une erreur. Si des paramètres non valides sont passés, cette fonction appelle le gestionnaire de paramètres non valides, comme décrit dans Validation de paramètre. Si l'exécution est autorisée à se poursuivre, la fonction retourne -1 et errno prend l'une des trois valeurs suivantes : EBADF, qui signifie que le descripteur de fichier n'est pas valide ou que le fichier n'est pas ouvert en écriture ; ENOSPC, qui signifie que l'espace restant sur l'appareil est insuffisant pour l'opération ; ou EINVAL, qui signifie que buffer était un pointeur null ou qu'un nombre impair count d'octets a été passé pour écriture dans un fichier en mode Unicode.

Pour plus d'informations sur ces codes de retour et autres, consultez errno, _doserrno, _sys_errlist et _sys_nerr.

Si le fichier est ouvert en mode texte, chaque saut de ligne est remplacé par une paire retour chariot-saut de ligne dans la sortie. Le remplacement n'a pas de conséquence sur la valeur de retour.

Quand le fichier est ouvert en mode de traduction Unicode, par exemple, si fd est ouvert en utilisant _open ou _sopen et un paramètre de mode qui inclut _O_WTEXT, _O_U16TEXT ou _O_U8TEXT, ou s'il est ouvert en utilisant fopen et un paramètre de mode qui inclut ccs=UNICODE, ccs=UTF-16LE ou ccs=UTF-8, ou si le mode est modifié pour un mode de traduction Unicode à l'aide de _setmode, buffer est interprété comme un pointeur vers un tableau de wchar_t qui contient des données UTF-16. 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é du nombre d'octets réellement écrits.

Quand l'écriture se produit dans des fichiers ouverts en mode texte, _write considère un caractère CTRL+Z comme la fin de fichier logique. Quand l'écriture vise un appareil, _write considère un caractère CTRL+Z dans la mémoire tampon comme un terminateur de sortie.

Configuration requise

Routine

En-tête requis

_write

<io.h>

Pour plus d'informations sur la compatibilité, voir Compatibilité.

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 occured 
            perror("Unexpected error!");
      }
   }
   else
   {
      printf_s( "Wrote %u bytes to file.\n", bytesWritten );
   }
   _close( fileHandle );
}
  

Voir aussi

Référence

E/S niveau bas

fwrite

_open, _wopen

_read

_setmode