Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6
  1. #1
    Membre du Club
    Homme Profil pro Yann LE PETITCORPS
    Analyste d'exploitation
    Inscrit en
    avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Nom : Homme Yann LE PETITCORPS
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : avril 2011
    Messages : 62
    Points : 52
    Points
    52

    Par défaut Comment peut-on faire se faire mordre la queue à deux programmes pipés ?

    Salut,


    J'essaye de mettre en place une sorte de systême producteur/consommateur mais où la sortie du consommateur réinjecterait sa sortie en entrée du programmes producteur et vice-versa

    Pas de problême pour piper le producteur et le consommateur
    (cf. producteur | consommateur => la sortie standard du producteur devient l'entrée standard du consommateur)

    Mais je ne sais pas comment "boucler la boucle"
    (cf. le consommateur doit aussi répondre au producteur, cf. la sortie standard du consommateur doit aussi devenir l'entrée standard du producteur)

    Le but étant de gérer un systême de questions/réponses évoluées mais où la partie réponse pourrait soit provenir d'une personne devant le clavier, soit d'un automate qui simulerait sa présence.

    A noter que je ne désire pas pas passer par un vrai systême client/serveur car je veux un truc hyper basique qui puissent se lancer en une ligne de commande et qui soit le plus court possible (style de toutes simples commandes comme `producteur | consommateur` ou uniquement `consommateur` si je veux remplacer moi-même le systême producteur quoi ...)

    De l'autre côté, l'utilisation d'un serveur HTML résoudrait facilement le pb (vu que c'est c'est typiquement fait pour ...) mais j'aimerais bien ne pas avoir à utiliser une énorme massue pour écraser un tout minuscule moustique ...



    @+
    Yannoo

  2. #2
    Membre habitué
    Inscrit en
    mai 2010
    Messages
    279
    Détails du profil
    Informations forums :
    Inscription : mai 2010
    Messages : 279
    Points : 121
    Points
    121

    Par défaut

    avec un tube nommé ?

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    octobre 2008
    Messages
    1 514
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : octobre 2008
    Messages : 1 514
    Points : 2 483
    Points
    2 483

    Par défaut

    Dans le processus père, avant de forker, tu créé deux pipes. Puis tu fork, et tu ferme les bon bout de chaque pipe dans chaque processus. Le père écrira dans dans le 1er pipe et lira dans le 2ème. Le fils écrira dans le 2ème pipe et lira dans le 1er.

    Attention toutefois aux problème de deadlock. Pour bien faire les choses il faut que chaque processus (le père et le fils) fasse une boucle de select() (ou poll(), c'est pareil) pour scruter les deux pipes, et faire ce qu'il convient de faire quand l'un des deux pipes est disponible.

  4. #4
    Expert Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 527
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    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 : 4 527
    Points : 10 130
    Points
    10 130

    Par défaut

    Salut

    Tu ne dis pas si tu es en shell ou en C ou en Python ou en autre chose. Matafan t'a donné une solution C. Voici une solution shell

    création tubes nommé X et Y

    P1
    Code bash :
    1
    2
    3
    4
    5
    6
    tant que
    faire
        travailler
        écrire dans X
        lire Y
    fin faire

    P2
    Code bash :
    1
    2
    3
    4
    5
    6
    tant que
    faire
        lire X
        travailler
        écrire dans Y
    fin faire
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

  5. #5
    Membre du Club
    Homme Profil pro Yann LE PETITCORPS
    Analyste d'exploitation
    Inscrit en
    avril 2011
    Messages
    62
    Détails du profil
    Informations personnelles :
    Nom : Homme Yann LE PETITCORPS
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Analyste d'exploitation
    Secteur : Finance

    Informations forums :
    Inscription : avril 2011
    Messages : 62
    Points : 52
    Points
    52

    Par défaut

    Merci, Matafan et Sve@r


    Je vais essayer ça dans la semaine

    De préférence, ce serait pour être utilisé dans un script-shell
    (mais si je vois que c'est trop lent à l'execution, je le ferais passer en C)

    Sve@r, ça ne crée pas un pb s'il n'y a pas systématiquement une réponse après chaque question ?
    (ce serait bien de ne pas être obligé de devoir systématiquement répondre avant qu'une nouvelle question soit posée => un systême de file d'attente serait sûrement mieux ==> donc à mon avis, je vais le faire directement en C car la solution de Sve@r m'a l'air plus souple à ce niveau)


    @+
    Yannoo

  6. #6
    Expert Confirmé Sénior
    Avatar de Sve@r
    Homme Profil pro Frédéric
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    4 527
    Détails du profil
    Informations personnelles :
    Nom : Homme Frédéric
    Âge : 46
    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 : 4 527
    Points : 10 130
    Points
    10 130

    Par défaut

    Citation Envoyé par yannoo95170 Voir le message
    Sve@r, ça ne crée pas un pb s'il n'y a pas systématiquement une réponse après chaque question ?
    Ah si, c'est obligatoire. Un pipe est aussi fait pour synchroniser deux processus. Si l'un écrit alors il faut absolument qu'un autre aille lire sinon le premier est bloqué. Et idem si le premier tente de lire alors que personne n'a écrit dedans...

    Citation Envoyé par yannoo95170 Voir le message
    un systême de file d'attente serait sûrement mieux ==> donc à mon avis, je vais le faire directement en C car la solution de Sve@r m'a l'air plus souple à ce niveau)
    Exact tu auras plus de souplesse en C qu'en shell...
    Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
    Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
    Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
    Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
    Dr. Adrian Rogers (1931-2005)

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •