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 :

[structure] FIFO de contenu différent


Sujet :

C

  1. #1
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut [structure] FIFO de contenu différent
    Bonjour,

    Je désire mettre en place 2 files de type FIFO pour mon programme dont une file sera prioritaire par rapport à l'autre. Pour réaliser cette logique, mécanisme très simple : Tant que la FIFO prioritaire n'est pas vide, je ne m'occupe pas de l'autre.

    Mon soucis c'est que pour la FIFO normale j'ai ces structures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    typedef struct Element{
    	struct paquet_get_or_ack *pga;
    	struct ip *phIP;
    	struct Element *next;
    }Element;
     
    typedef struct ListFifo{
    	struct Element *first;
    	struct Element *last;
    	int size;
    }ListFifo
    Et pour la FIFO prioritaire, la structure Element devrai contenir comme premier élément la structure struct paquet_retransmission *retr et non pas struct paquet_get_or_ack *pga.

    Comment puis-je faire ceci ? suis-je obligé de redéfinir une structure ainsi que toutes mes méthodes ? merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    1- Utiliser un void *
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    typedef struct Element{
    	void * paquet;
    	struct ip *phIP;
    	struct Element *next;
    }Element;
    Il faudra correctement transtyper paquet, selon que la donnée est issue d'une FIFO ou de l'autre. Avec elem une instance de Element :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    struct paquet_get_or_ack * pga = (struct paquet_get_or_ack *)elem.paquet;
    //...
    //ou selon le cas
    struct paquet_retransmission * retr = (struct paquet_retransmission*)elem.paquet;
    //...
    2- Utiliser une union
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    typedef struct Element{
    	union {
              struct paquet_get_or_ack *pga;
              struct paquet_retransmission *retr;
            }paquet;  
    	struct ip *phIP;
    	struct Element *next;
    }Element;
    En C11, on pourra ne pas nommer l'union et écrire directement elem.pga ou elem.retr selon le cas. En C99, il faudra nommer l'union, et écrire elem.paquet.pga ou elem.paquet.retr.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Ingénieur réseau et sécurité / Consultant
    Inscrit en
    Août 2005
    Messages
    1 068
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur réseau et sécurité / Consultant
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 1 068
    Par défaut
    salut. Merci de ta réponse !

    Je serais tout le temps en C99. La seconde option me semble plus propre non ?

  4. #4
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    La seconde option me semble plus propre non ?
    Je crois que ça dépend de l'utilisation de ces structures, donc du reste du code (et des modifications à apporter au code existant)

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par cyrill.gremaud Voir le message
    Je serais tout le temps en C99. La seconde option me semble plus propre non ?
    Salut
    Les deux options sont toutes deux aussi efficaces et éprouvées. Mais si tu es sous Unix, tu as aussi possibilité d'utiliser les msq.
    Il s'agit d'un mécanisme géré par le noyau implémentant des listes FIFO génériques. Te suffit de définir une boite, la remplir avec tes éléments puis l'envoyer dans la msq et le noyau se charge de la stocker. Ensuite, quand tu veux le premier élément te suffit de le demander et le noyau te donne la première boite de la msq en la supprimant de la file.
    En plus chaque boite possède un flag numérique te permettant de les organiser. Tu peux par exemple mettre tous les éléments prioritaires à 1 et tous les autres à 2. Ensuite tu peux filtrer en demandant par exemple un élément de type 2 et le noyau ne s'occupe alors que des boites de type 2.
    Si tu veux plus d'infos à ce sujet => http://fr.lang.free.fr/cours/IPC_Csyst_v1.0.pdf pages 10 à 15...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/08/2010, 13h24
  2. liste avec contenu différent
    Par robert_trudel dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 28/03/2008, 15h41
  3. Titre et entrée sommaire de contenu différent
    Par Mister Nono dans le forum Word
    Réponses: 9
    Dernier message: 20/03/2008, 12h28
  4. Thread Synchronisation avec structure FIFO ??
    Par vincedom dans le forum MFC
    Réponses: 5
    Dernier message: 30/03/2006, 06h00
  5. Structure FIFO optimisée à l'accès
    Par guipom dans le forum Langage SQL
    Réponses: 5
    Dernier message: 03/11/2005, 09h56

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