Sous-routine WriteFile

Objectif

Ecrit les données dans un socket.

Syntaxe

#include <iocp.h>
boolean_t WriteFile (FileDescriptor, Buffer, WriteCount, AmountWritten, Overlapped)
HANDLE FileDescriptor;
LPVOID Buffer;
DWORD WriteCount;
LPDWORD AmountWritten;
LPOVERLAPPED Overlapped; 

Descriptif

La sous-routine WriteFile écrit le nombre d'octets spécifié par le paramètre WriteCount à partir de la mémoire tampon indiquée par le paramètre Buffer dans le paramètre FileDescriptor . Le nombre d'octets écrits est enregistré dans le paramètre AmountWritten . Le paramètre Surpris indique si l'opération peut être gérée de manière asynchrone ou non.

La sous-routine WriteFile renvoie une valeur booléenne (un entier) indiquant si la demande a été exécutée ou non.

La sous-routine WriteFile fait partie de l'extension du noyau du port d'achèvement d'E-S (IOCP).

Remarque: Cette sous-routine ne fonctionne qu'avec un descripteur de fichier de socket. Il ne fonctionne pas avec des fichiers ou d'autres descripteurs de fichiers.

Paramètres

Article Descriptif
FileDescriptor Indique un descripteur de fichier valide obtenu à partir d'un appel vers les sous-routines Socket ou Accepter .
Tampon Indique la mémoire tampon à partir de laquelle les données seront écrites.
WriteCount Indique le nombre maximal d'octets à écrire.
AmountWritten Indique le nombre d'octets écrits. Le paramètre est défini par le sous-programme.
Surpris Indique une structure imbriqué indiquant si la demande peut être traitée de manière asynchrone ou non.

Valeurs renvoyées

Une fois l'opération terminée, la sous-routine WriteFile renvoie une valeur booléenne indiquant que la demande a abouti.

Si la sous-routine WriteFile échoue, le gestionnaire de sous-routine exécute les fonctions suivantes:
  • Renvoie une valeur de 0 au programme appelant.
  • Déplace un code d'erreur indiquant l'erreur spécifique dans la variable globale Errno . Pour plus d'informations sur la variable Errno , voir le lien dans la section Informations connexes du présent document.

Codes d'erreur

Article Descriptif
EINPROGRESS La demande d'écriture ne peut pas être immédiatement satisfaite et sera traitée de manière asynchrone. Un paquet d'achèvement sera envoyé au port d'achèvement associé une fois terminé.
FEAGA La demande d'écriture ne peut pas être immédiatement satisfaite et ne peut pas être traitée de manière asynchrone.
EINVAL FileDescriptor n'est pas valide.

Exemples

Le fragment de programme suivant illustre l'utilisation de la sous-routine WriteFile pour écrire des données de manière synchrone sur un socket:
void buffer;
int amount_written;
b=WriteFile (34, &buffer, 128, &amount_written, NULL);
Le fragment de programme suivant illustre l'utilisation de la sous-routine WriteFile pour écrire de manière asynchrone des données sur un socket:
void buffer;
int amount_written;
LPOVERLAPPED overlapped;
b = ReadFile (34, &buffer, 128, &amount_written, overlapped);
Remarque: La demande ne sera traitée de manière asynchrone que si elle ne peut pas être immédiatement satisfaite.