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.