IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Erreur WriteFile incohérente


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Points : 89
    Points
    89
    Par défaut Erreur WriteFile incohérente
    Bonjour à tous,

    J'utilise la fonction Windows WriteFile qui permet d'écrire dans une named pipe des données.
    La création de la named pipe ne pose pas de problèmes, et la lecture de la named pipe reçoit 100% des données envoyées...
    Mais la fonction WriteFile me retourne quand même une erreur (retourne FALSE).
    Le GetLastError me donne 109 : ERROR_BROKEN_PIPE et la variable sensé contenir le total des données envoyées est à 0, alors que tout a bien été reçu de l'autre côté de la pipe.

    Voici un bout de code où j'appelle la fonction (et la création de ma named pipe) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    // Named Pipe creation
    pipe = CreateNamedPipe(
    	pipe_name, // name of the pipe
    	PIPE_ACCESS_DUPLEX, // Read/Write
    	PIPE_TYPE_BYTE, // send data as a byte stream
    	1, // only allow 1 instance of this pipe
    	0, // no outbound buffer
    	0, // no inbound buffer
    	0, // use default wait time
    	NULL // use default security attributes
    );
    if(pipe == NULL || pipe == INVALID_HANDLE_VALUE)
    {
    	printf("Failed to create the named pipe '%s'!\n", pipe_name);
    	CloseHandle(pipe);
    	return 6;
    }
     
    // Write the restore_data on the named pipe
    result = WriteFile(
    	pipe, // handle to our generic write pipe
    	restore_data, // data to send
    	sizeof_data, // length of data to send (bytes)
    	&numBytesWritten, // will store actual amount of data sent
    	NULL // not using overlapped IO
    );
    if(!result)
    {
    	printf("Error while sending data to the named pipe: %d\n", GetLastError()); // Affiche : 109
    	printf("SizeOfData: %d\tNumBytesWritten: %d\n", sizeof_data, numBytesWritten); // Affiche : Le réel montant et 0.
    	CloseHandle(pipe);
    	return 2;
    }
    Je sais juste que dans certains cas (named pipe asynchronous), le retour de WriteFile peut être false, mais ce n'est pas le cas ici, et en plus le retour d'erreur est sensé être ERROR_IO_PENDING, et non ERROR_BROKEN_PIPE.

  2. #2
    Membre éclairé
    Inscrit en
    Décembre 2010
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 290
    Points : 719
    Points
    719
    Par défaut
    bonjour,

    je vois rien de spécial ou d'anormal dans ton code, mais un truc que je n'ai jamais essayé avec les pipes sous Windows, c'est de passer 0 comme buffers à la fonction CreateNamedPipe.

    tu as essayé avec d'autres valeurs, genre 1024 ou ce genre de trucs ?

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juin 2007
    Messages
    204
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2007
    Messages : 204
    Points : 89
    Points
    89
    Par défaut
    Salut et merci pour la réponse.

    J'avais suivi un tuto sur internet qui ne précisait pas de taille de buffer, et jusque là sa fonctionnait très bien comme sa.

    Pour essayer j'ai mis en taille de buffer la taille de ma variable restore_data (donc sizeof_data). Maintenant il reste bloqué et il ne se passe rien. Comme s'il attendait plus de données que ce qu'il a reçu.

Discussions similaires

  1. Erreur Accessibilité incohérente
    Par Mrgn" dans le forum Windows Forms
    Réponses: 4
    Dernier message: 19/04/2012, 06h16
  2. Réponses: 1
    Dernier message: 08/03/2011, 23h52
  3. erreur File ended while scaning use of \@writefile
    Par Joshn dans le forum Erreurs - Avertissements
    Réponses: 4
    Dernier message: 14/08/2008, 18h08
  4. Erreur d'accessibilité incohérente
    Par homomorphisme dans le forum C#
    Réponses: 18
    Dernier message: 10/05/2008, 01h41
  5. Erreur : "Accessibilité incohérente"
    Par pot2yaourt dans le forum C#
    Réponses: 1
    Dernier message: 01/05/2007, 10h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo