_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. La valeur renvoyée -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 ; ENOSPC
ce 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
_doserrno
et _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_U16TEXT
ou , ou _O_U8TEXT
s’il est ouvert à l’aide fopen
et un paramètre de mode qui inclut ccs=UNICODE
, ccs=UTF-16LE
ou , ou ccs=UTF-8
si le mode est remplacé par un mode de traduction Unicode à l’aide _setmode
de –buffer
est interprété comme un pointeur vers un tableau de données qui contient des wchar_t
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.
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.