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 :

[IPC] msgsnd : Invalid Argument


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de KneXtasY
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 121
    Par défaut [IPC] msgsnd : Invalid Argument
    Bonjour,

    J'ai un problème avec l'utilisation de la fonction msgsnd.

    Lors de l'execution de mon programme, j'obtiens un jolie :
    msgsnd : Invalid Argugment

    Je me suis rendu compte que l'erreur vient de la taille passée en paramètre, en effet en remplacent sizeof(struct Msg_reponse)-sizeof(long) par un entier assez grand, je n'ai plus le problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void envoyerReponse(int msgid,struct Msg_reponse* message){
    	if(msgsnd(msgid, message, sizeof(struct Msg_reponse)-sizeof(long),0) == -1){
    		perror("msgsnd");
    		exit(1);
    	}
    }
    Les structures utilisées :
    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
    typedef union
    {
    	Liste_Clients liste_clients;
    	Liste_Webcams liste_webcams;
    	Ack ack;
    }Reponse;
     
     
    typedef struct{
    	char opt;
    	Reponse reponse;
    }Reponse_option;
     
    struct Msg_reponse{
    	long type;
    	Reponse_option reponse_option;
    };
    Selon man msgsnd :
    The msgp argument is a pointer to caller-defined structure of the following general form:

    struct msgbuf { long mtype; /* message type, must be > 0 */ char mtext[1]; /* message data */ };

    The mtext field is an array (or other structure) whose size is specified by msgsz, a non-negative integer value.
    Dans mon cas, mtext est un Reponse_option donc un Reponse_option a bien la taille d'un struct Msg_reponse - la taille d'un long.

    De plus, si je remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sizeof(struct Msg_reponse)-sizeof(long)
    par :
    , j'obtiens le même message d'erreur ...



    Quelqu'un peut t-il m'éclairer ?

    Merci d'avance.

  2. #2
    Membre confirmé Avatar de KneXtasY
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 121
    Par défaut
    La réponse était dans la question !
    Dans mon cas, mtext est un Reponse_option donc un Reponse_option a bien la taille d'un struct Msg_reponse - la taille d'un long.
    Il fallait simplement faire un sizeof(Reponse_option).

    J'ai du m'embrouiller dans les noms de mes structures .
    Il m'a quand même fallut 3 jours pour trouver la solution ...

    Travailler pendant les fêtes, c'est pas trés productif !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Invalid argument supplied for foreach()
    Par Rajhonson dans le forum Langage
    Réponses: 4
    Dernier message: 16/11/2006, 14h31
  2. Réponses: 11
    Dernier message: 19/05/2006, 11h41
  3. Réponses: 26
    Dernier message: 24/03/2006, 13h44
  4. [Tableaux] Problème invalid argument foreach()
    Par kcizth dans le forum Langage
    Réponses: 9
    Dernier message: 05/01/2006, 11h56
  5. Invalid argument?
    Par Anduriel dans le forum Langage
    Réponses: 24
    Dernier message: 12/10/2005, 19h15

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