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 :

Fonction msgrcv


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Par défaut Fonction msgrcv
    Bonjour,

    Pour mon programme, j'ai besoin de lire des données dans une queue de message. Pour cela, j'utilise la fonction msgrcv. Quand on appelle cette fonction, elle se bloque jusqu'à ce qu'elle arrive à lire une donnée dans la queue. Moi j'aimerai qu'elle essaye de lire une donnée mais qu'elle ne se bloque pas si elle ny arrive pas. Si elle ne trouve pas de données, je voudrais qu'elle passe à la suite.

    Savez vous si cela est possible et si oui comment le faire ?

    Merci bcp pour votre aide!

  2. #2
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    y'a un flag IPC_NOWAIT, mais je ne sais plus où on est supposé le mettre...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Par défaut
    Oui exact, c'est le dernier argument de la fct msgrcv.
    Cette option gère seulement le cas où les données dans la queue de message n'ont pas la taille attendue.
    D'après ce que j'ai compris, il ne gère pas la présence d'un élément dans la queue... ou alors je n'ai pas bien compris son utilisation... ce qui est possible!!

    J'aimerai bien avoir vos remarques sur ce point svp.

    Merci bcp pour votre aide!

  4. #4
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    D'après la page man,

    http://man.developpez.com/man2/msgop.2.php

    L'argument msgflg est composé d'un OU binaire ( | ) avec les options suivantes :

    IPC_NOWAIT
    Si aucun message du type desiré n'est présent, l'appel système échoue et errno est fixé à ENOMSG.
    Donc c'est ce que tu veux...

    Jc

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    247
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 247
    Par défaut
    Je crois que ça gère seulement le cas où un message est présent ET n'est pas du type désiré.
    S'il n'y a pas de message dans la queue, le type n'est apparemment pas vérifié.
    En tout cas, dans mon code, le fct msgrcv attend un message et se bloque alors que j'ai précisé IPC_NOWAIT. Et je n'ai rien dans ma queue...

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Je ne sais pas comment tu l'as programmé mais j'ai tenté chez moi ce code et il fonctionne comme tu voudrais. Il sort tout de suite vu que la file est vide...

    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
    #include <sys/types.h>
    #include <sys/ipc.h>
    #include <sys/msg.h>
    #include <stdio.h>
     
    //Structure de réception
    struct msgbuf {
      long  mtype;    /* type de message ( > 0 ) */
      char  mtext[10]; /* contenu du message      */
    };
     
    int main()
    {
    struct msgbuf msgp;
    int msgid,res;
     
    //Creation de la file
    msgid = msgget(IPC_PRIVATE, IPC_CREAT|0777);
     
    //Test de validité
    if(msgid!=-1)
      {
      printf("ID: %d\n",msgid);
     
      //Récupération d'un message de type 1
      res = msgrcv(msgid,&msgp,sizeof(msgp.mtext),1,IPC_NOWAIT);
     
      printf("Receive: %d\n",res);
      if(res==-1)
       perror("");
      }
    else
       printf("Création de file échouée\n");
     
    return 0;
    }
    Jc

Discussions similaires

  1. Réponses: 8
    Dernier message: 12/02/2013, 01h08
  2. Fonction API
    Par margilb dans le forum C++Builder
    Réponses: 2
    Dernier message: 08/07/2002, 11h11
  3. Implémentation des fonctions mathématiques
    Par mat.M dans le forum Mathématiques
    Réponses: 9
    Dernier message: 17/06/2002, 16h19
  4. fonction printf
    Par ydeleage dans le forum C
    Réponses: 7
    Dernier message: 30/05/2002, 11h24
  5. FOnction api specifiant la position de la souris
    Par florent dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/05/2002, 20h07

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