_write

 

Pour obtenir la dernière documentation sur Visual Studio 2017 RC, consultez Documentation Visual Studio 2017 RC.

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

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 les paramètres non valides sont passés, cette fonction appelle le Gestionnaire de paramètre non valide, 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 les autres codes de retour, voir 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 à l’aide de _open ou _sopen et un paramètre de mode qui inclut _O_WTEXT, _O_U16TEXT, ou _O_U8TEXT, ou s’il est ouvert à l’aide de 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 UTF-16 données. Toute tentative d’écriture d’une quantité impaire d’octets dans ce mode provoque une erreur de validation de paramètre.

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.

RoutineEn-tête requis
_write<io.h>

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

// 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 );  
}  

Wrote 36 bytes to file.  

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

Afficher: