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 :

File de messages POSIX


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Par défaut File de messages POSIX
    Bonjour,

    J'éssai désespérément de créer un file de messages. Bon la créer ce n'est pas le problème, sauf que j'ai l'impression qu'elle ne reçoit aucun message.. D'ailleurs je specifie un nombre max de messages pourtant je peux lui en envoyer plus..Idem avec la taille d'un message. il me semblait que ca devait provoquer une erreur non ?

    Je laisse le code au cas ou quelqu'un est assez familier avec ca

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    #include <unistd.h>
    #include <mqueue.h>
    #include <stdio.h>
    #include <signal.h>
    #include <string.h>
    #include <sys/types.h>
    #include <stdlib.h>
     
    int main(int argc, char ** argv){
    	int i=0;
    	mqd_t mq;
     
    	struct mq_attr attr;
    	struct mq_attr live_attr;
    	//struct sigaction sa;
     
    	attr.mq_maxmsg = 5;
    	attr.mq_msgsize = 30;
    	attr.mq_flags = 0;
    	attr.mq_curmsgs = 0;
     
    	char buff[100];
    	strcpy(buff, "TRANX");
    	int msgsize = 100;
     
     
     
    	if (mq = mq_open("/queue", O_CREAT | O_RDWR | O_EXCL, 0666, attr) == -1){
    		perror("Error : message queue ");
    		mq_unlink("/queue");
    		exit(1);
    	}
     
     
    	while(i!=10){
    		mq_send(mq, buff, msgsize, 1);
    		mq_getattr(mq, &attr);
    		printf("nbre msg : %d\n",attr.mq_curmsgs);
    		printf("max msg : %d\n",attr.mq_maxmsg);
    		printf("%d \n",i);
    		i++;
    	}
    	mq_unlink("/queue");
    }

  2. #2
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Qu'est ce que entend par erreur ?

    Tu ne vérifie même pas si mq_send et mq_get_attr renvoi un code d'erreur !
    Donc surement que si car msgsize utilisé dans mq_send >>> à msgsize utilisé dans mq_open

  3. #3
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Par défaut
    ah exact, j'ai donc fait la modif et l'erreur générée par le mq_send est 'Bad file descriptor' pourtant le mq_open ne me renvoie pas d'erreur ..

  4. #4
    Membre chevronné
    Avatar de Foobar1329
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    283
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Juin 2006
    Messages : 283
    Par défaut
    Hello,

    Citation Envoyé par DrTank
    Bonjour,

    J'éssai désespérément de créer un file de messages. Bon la créer ce n'est pas le problème, sauf que j'ai l'impression qu'elle ne reçoit aucun message.. D'ailleurs je specifie un nombre max de messages pourtant je peux lui en envoyer plus..Idem avec la taille d'un message. il me semblait que ca devait provoquer une erreur non ?

    Je laisse le code au cas ou quelqu'un est assez familier avec ca
    Citation Envoyé par DrTank
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    	char buff[100];
    	strcpy(buff, "TRANX");
    	int msgsize = 100;
    msgsize ne sert à rien, sizeof(buff)/sizeof(*buff) serait plus propre au cas où tu déciderais de changer de taille de buffer.


    Citation Envoyé par DrTank
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	if (mq = mq_open("/queue", O_CREAT | O_RDWR | O_EXCL, 0666, attr) == -1){
    Belle, belle !! Faut arrêter de programmer trop tar le soir, la bad file descriptor est potentiellement justifié ici. Il ne manque pas des parenthèses ?

    Tu affectes à mq le résultat de la comparason entre le retour de mq_open et -1 et non le retour de mq_open.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ( (mq = mq_open("/queue", O_CREAT | O_RDWR | O_EXCL, 0666, attr)) == (mqd_t)-1)
    Et voilà, tu dois bien avoir un bad file descriptor et il ne te reste plus qu'à scruter errno pour voir pourquoi.

    A+

  5. #5
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Par défaut
    Ahhh bien vu c'était effictivement ca... tout fonctionne maintenant, merci


    edit : En revanche quand je fais un printf de attr.mq_maxmsg il m'affiche 10 alors que ce n'est pas ce que je lui ai spécifié. Meme apres un mq_setattr avec une valeur differente il m'affiche 10, c'est à n'y rien comprendre..

  6. #6
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Par défaut
    up

  7. #7
    Membre émérite Avatar de mchk0123
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    816
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 816
    Par défaut
    Merci de cliquer sur le bouton quand on à trouvé la solution.

  8. #8
    Membre confirmé
    Inscrit en
    Janvier 2004
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 60
    Par défaut
    bah oui mais il reste un petit probleme que je n'arrive pas a résoudre..

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

Discussions similaires

  1. File de message posix
    Par lalon dans le forum C
    Réponses: 2
    Dernier message: 02/01/2013, 23h07
  2. [Debutant]Probleme file de message
    Par Treuze dans le forum C
    Réponses: 11
    Dernier message: 15/05/2006, 21h46
  3. Créer plusieures file de message différentes
    Par progamer54 dans le forum Linux
    Réponses: 6
    Dernier message: 06/04/2006, 15h36
  4. Réponses: 8
    Dernier message: 09/02/2006, 18h51
  5. IPC : Files de messages et accès exclusif
    Par thomasvst dans le forum C
    Réponses: 2
    Dernier message: 07/12/2005, 09h47

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