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 :

Application du problème des producteurs consommateur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2017
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : Bénin

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2017
    Messages : 31
    Par défaut Application du problème des producteurs consommateur
    Bonsoir, à tous j'aimerias avoir votre aide sur un exercice sur les processus que je n'arrive pas à démarrer malgré mes nombreuses recherches. Comment creer un processus producteur qui lit un fichier et transmet ces informations à un processus consommateur pour que celui-ci copie ces informations dans un autre fichier ? En gros voici le problème:
    Exercice:
    Vous devez créer deux processus, un producteur et un consommateur. Le processus pro-ducteur lit un fichier et transmet ces informations au processus consommateur. Celui-ci copie alors ces informations dans un autre fichier. La taille des données transférées à chaque échange est laissée à votre discrétion. Le mode de lecture et d’écriture est par contre un argument passé au programme :
    "-o" : mode octale,
    "-f" : mode flux,
    "-m" : mode mappés.
    Les noms de fichiers sont également passés en arguments au programme.Le type de mémoire qu’il faut utiliser pour assurer la communication entre les processusest également un argument passé au programme :
    "-p" : type tubes,
    "-b" : type boîte à message,
    "-s" : type segment de mémoire partagé.
    Le transfert prend fin lorsque le producteur à envoyer tout le contenu du fichier. Le processus fils affiche alors des statistiques du transfert :
    1. temps de l’échange,
    2. taille de données reçues,
    3. taille des données enregistrées,
    4. nom du fichier source,
    5. nom du fichier dans lequel les informations ont été enregistrées.
    La syntaxe de la commande à utiliser pour l'execution est la suivante: ./td mode-lecture type-communication fichier-source fichier-destination

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    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 835
    Billets dans le blog
    1
    Par défaut
    Bonjour

    Le vrai point chaud de ce TP est le choix laissé à l'utilisateur pour la façon de transmettre. Parce que sinon il n'y avait aucun souci: un fichier pipe ou un pipe mémoire et c'était torché, la synchronisation étant inhérente au pipe était alors assurée par le noyau Unix.
    Mais avec les shm et msq, plus possible d'assurer une synchro automatique, il faut l'assurer manuellement. Et le seul outil pour assurer une synchro manuelle c'est le sémaphore.

    Donc voici comment je ferais
    Code producteur : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    le producteur ouvre le fichier et entame une boucle de lecture
    tant que lire info, faire
        prendre sémaphore
        écrire infos dans outil de comm (pipe, shm, msq selon le choix de l'utilisateur)
        rendre sémaphore
    fin faire
    fermeture fichier

    Code consommateur : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    le consommateur ouvre le fichier résultat et entame une boucle de lecture
    boucle infinie, faire
        prendre sémaphore
        lire infos depuis outil de comm (le même)
        rendre sémaphore
        si plus d'info break
        écrire infos dans fichier résultat (cela peut se faire évidemment après la restitution du sémaphore ce qui permet au producteur de travailler pendant cette étape)
    fin faire
    fermeture fichier

    Donc du fork(), du semget(), du semop() et tous les outils permettant d'écrire et lire dans les divers supports (pipe, msq, shm). Il y aura aussi un petit truc à mettre en place pour dire au consommateur qu'il n'y a plus rien à lire (peut-être une valeur spéciale ou alors une zone spéciale de la shm) bon bref un truc à réfléchir quoi.
    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. probléme producteur/consommateur linux
    Par MEKKADRA dans le forum Linux
    Réponses: 1
    Dernier message: 07/01/2014, 13h50
  2. [MFC]Application basée sur des boites de dialogue
    Par -=Spoon=- dans le forum MFC
    Réponses: 2
    Dernier message: 24/08/2005, 11h55
  3. MDI Application et nom des fenêtres dans le menu
    Par Captain_JS dans le forum C++Builder
    Réponses: 3
    Dernier message: 11/08/2005, 08h26
  4. Application international (Gestion des dates)
    Par vsavoir dans le forum C++Builder
    Réponses: 2
    Dernier message: 01/08/2005, 10h22

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